usando gsub no awk para substituir uma palavra com parênteses

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 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *