Як замінити ліву дужку на sed?


27

Мені потрібно замінити (якийсь символ у моєму файлі, і я не можу цього зробити. \(використовується для групування в sed, і коли я використовував \\(sed, він вважав це \(символом не просто так (. Мені це здається хитромудрим.


7
Пропозиція: якщо ви просто хочете замінити символ на інший, використання tr(anslate) echo 'Hello (world)' | tr '()' '[]'; він виводить Hello [world].
Лекенштейн

Відповіді:


45

Якщо ви використовуєте sed без -r (розширені регулярні вирази), він буде працювати так, як він використовує, \(\)а не ()для групування:

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

Я використовував це для заміни застарілого "розколу" php функцією "вибухнути", переконавшись, що "розбиттю" передує пробіл, а за ним "(".grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.