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