让我们说我想用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
答案 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