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