Hej hur kan jag använda gsub för att ersätta ett ord som har parenteser.
Här Jag vill ersätta ABC (T) med ABC / G
awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"
Svar
Du kan förenkla det hela om du använder //
-formatet för gsub
:
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G
Sedan kan du förenkla ytterligare genom att använda print
utan argument (vilket är samma som print $0
) 1
stenografi för utskrift (standard awk
för uttryck som utvärderas till sant, till exempel 1;
är att skriva ut den aktuella raden):
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G
Personligen skulle jag dock inte använda awk
för detta är syntaxen kortare och renare med andra verktyg:
$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G
Svar
Du var väldigt nära. Du behövde bara två \
. Det beror på att en av uppsättningarna är för själva texten som passerar genom BASH, och den andra skulle vara den faktiska \
som analyseras av awk. Det verkar fungera för mig:
echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME"
Och ger:
ABC/G