folosind gsub în awk pentru a înlocui un cuvânt cu paranteze

Bună, cum pot folosi gsub pentru a înlocui un cuvânt care are paranteze.

Aici Vreau să înlocuiesc ABC (T) cu ABC / G

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

Răspuns

Puteți simplifica totul dacă utilizați formatul // pentru gsub:

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

Apoi, puteți simplifica în continuare utilizând print fără argumente (care este același cu print $0) sau prescurtarea 1 pentru tipărire (acțiunea implicită awk pentru expresiile care se evaluează la adevărat, precum 1; este de a imprima linia curentă):

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

Personal, totuși, nu aș folosi awk pentru aceasta, sintaxa este mai scurtă și mai curată cu alte instrumente:

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

Răspuns

Erai foarte apropiat. Ați avut nevoie doar de două \. Asta pentru că unul dintre seturi este pentru textul în sine care trece prin BASH, iar celălalt ar fi \ real care este analizat de awk. Acest lucru pare să funcționeze pentru mine:

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

Și dă:

ABC/G 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *