utiliser gsub dans awk pour remplacer un mot par des parenthèses

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 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *