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