Hallo, hoe kan ik gsub gebruiken om een woord met haakjes te vervangen.
Hier Ik wil ABC (T) vervangen door ABC / G
awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"
Answer
Je zou het hele ding kunnen vereenvoudigen als je het //
formaat gebruikt voor gsub
:
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G
Vervolgens kunt u verder vereenvoudigen door print
te gebruiken zonder argumenten (wat hetzelfde is als print $0
) of de 1
afkorting voor afdrukken (de standaard awk
-actie voor expressies die evalueren naar true, zoals 1;
is om de huidige regel af te drukken):
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G
Persoonlijk zou ik echter “awk
hiervoor is de syntaxis korter en schoner met andere tools:
$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G
Antwoord
Je was heel dichtbij. Je had er maar twee nodig \
. Dat komt omdat een van set is voor de tekst zelf die door BASH gaat, en de andere is de daadwerkelijke \
die wordt geparseerd door awk. Dit lijkt voor mij te werken:
echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME"
En geeft:
ABC/G