med gsub i awk för att ersätta ett ord med parentes

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 

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *