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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.