bruker gsub i awk for å erstatte et ord med parentes

Hei hvordan kan jeg bruke gsub til å erstatte et ord som har parenteser.

Her Jeg vil erstatte ABC (T) med ABC / G

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

Svar

Du kan forenkle det hele hvis du bruker // format for gsub:

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

Deretter kan du forenkle ytterligere ved å bruke print uten argumenter (som er det samme som print $0) 1 forkortelse for utskrift (standard awk handling for uttrykk som vurderes til sant, for eksempel 1; er å skrive ut gjeldende linje):

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

Personlig vil jeg imidlertid ikke bruke awk for dette er syntaksen kortere og renere med andre verktøy:

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

Svar

Du var veldig nær. Du trengte bare to \. Det er fordi det ene settet er for selve teksten som går gjennom BASH, og det andre er selve \ som blir analysert av awk. Dette ser ut til å fungere for meg:

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

Og gir:

ABC/G 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *