如何用sed代替左括号?


27

我必须(用文件中的某些字符替换掉,但是我做不到。\(用于对sed进行分组,当我\\(与sed一起使用时,它将其视为\(字符而不是just (。在我看来,这是一个棘手的案例。


7
建议:如果你只是想代替另一个字符,请使用tr(anslate)echo 'Hello (world)' | tr '()' '[]'; 它输出Hello [world]
Lekensteyn

Answers:


45

如果使用不带 -r(扩展的正则表达式)的sed ,它将按其使用方式\(\)而不是()分组方式工作:

sed -e 's/(/X/g'

例如

$ echo "foo (bar) (baz)" | sed -e 's/(/X/g'
foo Xbar) Xbaz)

如果你想用-r你就可以把(里面[],例如,

sed -re 's/[(]/X/g'

正如Lekensteyn所说,使用tr可能更合适,因为您只是在替换而已,而不需要正则表达式的全部功能。


TL; DR:请不要逃避。
qwertzguy 2015年

我用这个来取代PHP的弃用“分裂”“爆炸”功能,确保“分裂”的前面有一个空格和一个尾随“(”grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
巴特尔布特库斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.