Comment remplacer une parenthèse gauche par sed?

27

Je dois remplacer (par un caractère dans mon fichier et je ne peux pas le faire. \(est utilisé pour le regroupement dans sed et quand je l'ai utilisé \\(avec sed, il l'a traité comme un \(caractère, pas comme un juste (. Cela me semble un cas délicat.

dwwdw
la source
7
Suggestion: si vous voulez juste de substituer un caractère à l' autre, l' utilisation tr(anslate): echo 'Hello (world)' | tr '()' '[]'; il sort Hello [world].
Lekensteyn

Réponses:

45

Si vous utilisez sed sans -r (expressions régulières étendues), cela fonctionnera comme il utilise \(\)plutôt que ()pour le regroupement:

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

Par exemple

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

Si vous souhaitez utiliser, -rvous pouvez mettre à l' (intérieur [], par exemple

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

Comme le fait remarquer Lekensteyn, l' utilisation trpourrait être plus appropriée car vous remplacez simplement et vous n'avez pas besoin de la pleine puissance des expressions régulières.

NN
la source
TL; DR: N'y échappez pas.
qwertzguy
Je l'ai utilisé pour remplacer la fonction "split" obsolète de php par la fonction "explode", en m'assurant que "split" est précédé d'un espace et suivi d'un "(".grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus