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