Verwenden von gsub in awk, um ein Wort durch Klammern zu ersetzen

Hallo, wie kann ich gsub verwenden, um ein Wort mit Klammern zu ersetzen.

Hier Ich möchte ABC (T) durch ABC / G ersetzen.

awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME" 

Antwort

Sie könnten das Ganze vereinfachen, wenn Sie das Format // für gsub verwenden:

$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G 

Dann können Sie weiter vereinfachen, indem Sie print ohne Argumente verwenden (dies entspricht print $0) oder Die Kurzform 1 zum Drucken (die Standardaktion awk für Ausdrücke, die als wahr ausgewertet werden, z. B. 1; soll die aktuelle Zeile drucken):

$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G 

Persönlich würde ich jedoch awk Dafür ist die Syntax mit anderen Tools kürzer und sauberer:

$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G 

Antwort

Sie standen sich sehr nahe. Sie brauchten nur zwei \. Dies liegt daran, dass einer der Sätze für den Text selbst bestimmt ist, der BASH durchläuft, und der andere der tatsächliche \ ist, der von awk analysiert wird. Dies scheint für mich zu funktionieren:

echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME" 

Und ergibt:

ABC/G 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.