Come sostituire una parentesi sinistra con sed?


27

Devo sostituire (con qualche carattere nel mio file e non posso farlo. \(è usato per raggruppare in sed e quando l'ho usato \\(con sed, lo ha trattato come un \(personaggio non solo (. Mi sembra un caso complicato.


7
Suggerimento: se si desidera solo per sostituire un personaggio per un altro, l'uso tr(anslate): echo 'Hello (world)' | tr '()' '[]'; esce Hello [world].
Lekensteyn,

Risposte:


45

Se usi sed senza -r (espressioni regolari estese) funzionerà come usa \(\)piuttosto che ()per raggruppare:

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

Per esempio

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

Se si desidera utilizzare -rè possibile inserire (all'interno [], ad es

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

Come osserva Lekensteyn, l' uso trpotrebbe essere più appropriato in quanto si sta semplicemente sostituendo e non è necessario il pieno potere delle espressioni regolari.


TL; DR: non sfuggire.
qwertzguy,

Ho usato questo per sostituire la "divisione" deprecata di php con la funzione "esplodi", assicurandomi che "divisione" sia preceduta da uno spazio e seguita da un "(".grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.