¿Cómo reemplazar un paréntesis izquierdo con sed?

27

Tengo que reemplazar (con algún carácter en mi archivo, y no puedo hacerlo. \(se usa para agrupar en sed y cuando lo usé \\(con sed, lo trató como \(personaje, no solo como (. Parece un caso complicado para mí.

dwwdw
fuente
77
Sugerencia: si lo que desea es sustituir un carácter por otro, el uso tr(anslate): echo 'Hello (world)' | tr '()' '[]'; Salidas Hello [world].
Lekensteyn

Respuestas:

45

Si usa sed sin -r (expresiones regulares extendidas) funcionará como se usa en \(\)lugar de ()para la agrupación:

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

Por ejemplo

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

Si quieres usarlo -rpuedes ponerlo (adentro [], ej.

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

Como comenta Lekensteyn, el uso trpodría ser más apropiado, ya que simplemente está reemplazando y no necesita todo el poder de las expresiones regulares.

NN
fuente
TL; DR: No te escapes.
qwertzguy 05 de
Utilicé esto para reemplazar la "división" obsoleta de php con la función "explosión", asegurándome de que "división" esté precedida por un espacio y seguido de un "(".grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus