Salut, comment puis-je utiliser gsub pour remplacer un mot qui a des parenthèses.
Ici Je souhaite remplacer ABC (T) par ABC / G
awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"
Réponse
Vous pouvez tout simplifier si vous utilisez le format //
pour gsub
:
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G
Ensuite, vous pouvez simplifier davantage en utilisant print
sans argument (ce qui équivaut à print $0
) ou le raccourci 1
pour limpression (laction awk
par défaut pour les expressions évaluées à vrai, telles que 1;
consiste à imprimer la ligne courante):
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G
Personnellement, cependant, je nutiliserais pas awk
pour cela, la syntaxe est plus courte et plus propre avec dautres outils:
$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G
Réponse
Vous étiez très proche. Il vous fallait juste deux \
. Cest parce que lun des ensembles est pour le texte lui-même passant par BASH, et lautre serait le \
réel qui est analysé par awk. Cela semble fonctionner pour moi:
echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME"
Et donne:
ABC/G