Как заменить левую скобку на 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'

Как отмечает Лекенштейн, использование trможет быть более уместным, поскольку вы просто заменяете и вам не нужны все возможности регулярных выражений.


TL; DR: не избегай этого.
qwertzguy

Я использовал это, чтобы заменить устаревший php «split» на функцию «explode», убедившись, что перед «split» стоит пробел, а за ним следует «(».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.