Como substituir um parêntese esquerdo por sed?

27

Eu tenho que substituir (por algum caractere no meu arquivo e não posso fazer isso. \(é usado para agrupar no sed e quando eu usei \\(com o sed, ele o tratou como \(personagem, não como justo (. Parece um caso complicado para mim.

dwwdw
fonte
7
Sugestão: se você quiser apenas para substituir um personagem para outro, uso tr(anslate): echo 'Hello (world)' | tr '()' '[]'; ele gera Hello [world].
Lekensteyn

Respostas:

45

Se você usar sed sem -r (expressões regulares estendidas), ele funcionará como em \(\)vez de ()agrupar:

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

Por exemplo

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

Se você quiser usar, -rpode colocar (dentro [], por exemplo

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

Como observa Lekensteyn, o uso trpode ser mais apropriado, pois você está apenas substituindo e não precisa de todo o poder das expressões regulares.

NN
fonte
TL; DR: Não escapa.
Qwertzguy 5/05
Eu usei isso para substituir obsoleta "split" de php com "explodir" função, certificando-se de "split" é precedido por um espaço e seguido por um "(".grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus