Bash 如果sed中满足条件,则开始新循环
我在一行上执行几个命令(Bash 如果sed中满足条件,则开始新循环,bash,sed,Bash,Sed,我在一行上执行几个命令(GNU-sed),如果满足某些条件,我想跳过其余的命令 例如: 我想用4替换所有d 如果行以A、C或E开头,则跳过其余命令(其他替换等) 我只想使用基本正则表达式。如果我可以使用扩展正则表达式,这将是微不足道的: sed -r 's/d/4/g; /^(A|C|E)/! { s/a/1/g; s/b/2/g; s/c/3/g }' data 现在,使用BRE,这将很好地工作,但对于更多的情况,这将非常难看: sed 's/d/4/g; /^A/! { /^C/! { /
GNU-sed
),如果满足某些条件,我想跳过其余的命令
例如:
4
替换所有d
A
、C
或E
开头,则跳过其余命令(其他替换等)sed -r 's/d/4/g; /^(A|C|E)/! { s/a/1/g; s/b/2/g; s/c/3/g }' data
现在,使用BRE,这将很好地工作,但对于更多的情况,这将非常难看:
sed 's/d/4/g; /^A/! { /^C/! { /^E/! { s/a/1/g; s/b/2/g; s/c/3/g } } }' data
输入示例:
Aaabbccdd
Baabbccdd
Caabbccdd
Daabbccdd
Eaabbccdd
示例输出:
Aaabbcc44
B11223344
Caabbcc44
D11223344
Eaabbcc44
这只是一个例子。我不是在寻找不同的方法来解决这个问题。我想知道一些更好的方法来开始新的周期。我建议使用
b
:
/^\(A\|C\|E\)/b
从man sed
:
b标签
:分支到标签;若省略了标签,则分支到脚本的末尾
啊……我们忘了我忘了可以用BRE来使用
\(\\\\\)
b
是一个很好的建议。谢谢!:)@是的,但这只是一个例子。条件可能更复杂:)@mickp\\\124;
在GNU中工作,仅用作BRE的扩展。“GNU sed BRE和ERE只在需要逃逸的方面有所不同。@BenjaminW。哦,我明白了。所以在非GNUsed
中,我必须做:/^A/b/^B/B…
?@mickp要获得替代,您需要ERE,目前不需要,但可能需要。建议对ERE使用-E
;GNU sed支持-r
和(直到最近才正式支持)-E
。