在一些模式之后,Sed替换所有匹配

时间:2015-10-14 07:03:19

标签: linux sed

我想在'='之后替换所有B。

echo A, B = A B B A B B B | sed 's/=\(.*\)B\(.*\)/=\1C\2/g'

预期结果应为

A, B = A C C A C C C

但我得到了这个结果:

A, B = A B B A B B C

仅替换最后匹配的模式。如何解决?

2 个答案:

答案 0 :(得分:2)

使用此sed

sed ':loop; s/\(=.*\)B\(.*\)/\1C\2/; t loop'

<强>测试

$ echo A, B = A B B A B B B | sed ':loop; s/\(=.*\)B\(.*\)/\1C\2/; t loop'
A, B = A C C A C C C

答案 1 :(得分:0)

与@sat相同的想法,但从字符串的开头

开始
sed -e ':cycle' -e 's/\(.*=.*\)B/\1C/;t cycle'

posix兼容所以应该适用于任何sed