如果在sed中满足条件,则开始新的循环

时间:2018-01-16 19:39:44

标签: bash sed

我在一行上执行了几个命令(GNU sed),如果满足某些条件,我想跳过其余的命令。

示例:

  1. 我想用d
  2. 替换所有4
  3. 如果行以ACE开头,请跳过其他命令(其他替换等)
  4. 我只想使用基本的正则表达式。如果我可以使用扩展的正则表达式,这将是微不足道的:

    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
    

    这只是一个例子。我不是在寻找解决问题的不同方法。我想知道开始一个新周期的更好方法

1 个答案:

答案 0 :(得分:3)

我建议使用b

/^\(A\|C\|E\)/b

来自man sed

  

b label:分支标签;如果省略label,则跳转到脚本结尾。