Sed替代:使组操作符可选

时间:2017-11-13 10:50:15

标签: sed substitution

让我们说我想用sed替换像#34; foo"," foo(1 1)"," foo(42 1)这样的表达式"通过" bar"。我试过了:

sed -i ':a;N;$!ba;s/foo([0-9]\+ [0-9]\+)\{0,1\}/bar/g' input.file

但是只在foo之后用括号替换表达式,而不是没有括号的foo。

你知道为什么吗?

我希望的例子:

INPUT

foo
foo(236 124)

OUPUT

bar
bar

2 个答案:

答案 0 :(得分:1)

您可以使用此sed

sed 's/foo\(([0-9]\+ [0-9]\+)\)\{0,1\}/bar/g' file
           ^                  ^
           Here, I have added grouping. So that, {0,1} would work exactly.

<强>测试

$ sed 's/foo\(([0-9]\+ [0-9]\+)\)\{0,1\}/bar/g' file
bar
bar

答案 1 :(得分:1)

使用GNU sed:

sed -E 's/foo(\([0-9]+ [0-9]+\))?/bar/' file