Olá, como posso usar gsub para substituir uma palavra que tem parênteses.
Aqui Quero substituir ABC (T) por ABC / G
awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"
Resposta
Você poderia simplificar tudo se usar o //
formato para gsub
:
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G
Então, você poderia simplificar ainda mais usando print
sem argumentos (que é o mesmo que print $0
) ou a 1
abreviação para impressão (a ação awk
padrão para expressões avaliadas como verdadeiras, como 1;
deve imprimir a linha atual):
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G
Pessoalmente, porém, eu não usaria awk
para isso, a sintaxe é mais curta e mais limpa com outras ferramentas:
$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G
Resposta
Você foi muito próximo. Você só precisava de dois \
. Isso ocorre porque um de set é para o próprio texto passando pelo BASH, e o outro seria o \
real que está sendo analisado por awk. Isso parece funcionar para mim:
echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME"
E dá:
ABC/G