gsub gebruiken in awk om een woord te vervangen door haakjes

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 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *