usando gsub in awk per sostituire una parola con parentesi

Ciao come posso usare gsub per sostituire una parola che ha parentesi.

Qui Voglio sostituire ABC (T) con ABC / G

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

Risposta

Potresti semplificare il tutto se utilizzi il formato // per gsub:

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

Quindi, potresti semplificare ulteriormente utilizzando print senza argomenti (che è uguale a print $0) o labbreviazione 1 per la stampa (lazione awk predefinita per le espressioni che restituiscono true, come 1; serve a stampare la riga corrente):

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

Personalmente, tuttavia, non userei awk per questo, la sintassi è più breve e più pulita con altri strumenti:

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

Risposta

Eri molto vicino. Ti servivano solo due \. Questo perché uno di set è per il testo stesso che passa attraverso BASH, e laltro sarebbe lattuale \ che viene analizzato da awk. Questo sembra funzionare per me:

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

e dà:

ABC/G 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *