Wie ersetze ich eine linke Klammer durch sed?

27

Ich muss durch (ein Zeichen in meiner Datei ersetzen , und ich kann es nicht tun. \(wird für die Gruppierung in sed verwendet und wenn ich es \\(mit sed verwendete, behandelte es es als \(Charakter, nicht als gerecht (. Es scheint mir ein kniffliger Fall zu sein.

dwwdw
quelle
7
Vorschlag: wenn Sie wollen einfach nur ein Zeichen für eine andere zu ersetzen, die Verwendung tr(anslate): echo 'Hello (world)' | tr '()' '[]'; es gibt aus Hello [world].
Lekensteyn

Antworten:

45

Wenn Sie sed without -r (erweiterte reguläre Ausdrücke) verwenden, funktioniert es so, wie es verwendet, \(\)anstatt es ()zu gruppieren:

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

Beispielsweise

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

Wenn Sie verwenden möchten , -rkönnen Sie setzen (innen [], zB

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

Wie Lekensteyn bemerkt, ist die Verwendung von trmöglicherweise sinnvoller, da Sie lediglich ersetzen und nicht die volle Kraft regulärer Ausdrücke benötigen.

NN
quelle
TL; DR: Entkomme nicht.
Qwertzguy
Ich habe dies benutzt, um PHPs veraltete "split" -Funktion durch "explode" -Funktion zu ersetzen, wobei sichergestellt wurde, dass "split" ein Leerzeichen und anschließend ein "(" vorausgeht.grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus