我在一行上执行了几个命令(GNU sed
),如果满足某些条件,我想跳过其余的命令。
示例:
d
4
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
这只是一个例子。我不是在寻找解决问题的不同方法。我想知道开始一个新周期的更好方法。
答案 0 :(得分:3)
我建议使用b
:
/^\(A\|C\|E\)/b
来自man sed
:
b label
:分支标签;如果省略label,则跳转到脚本结尾。