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

1

Olá, como posso usar o gub para substituir uma palavra que tenha 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"
    
por Raymond Ghaffarian Shirazi 29.06.2016 / 15:42

2 respostas

4

Você pode simplificar tudo usando o formato // para gsub :

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

Em seguida, você poderia simplificar ainda mais usando print sem argumentos (que é o mesmo que print $0 ) ou a abreviação 1 para impressão (a ação awk padrão para expressões que são avaliadas como verdadeiras, como 1; é imprimir a linha atual):

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

Pessoalmente, no entanto, 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
    
por 29.06.2016 / 17:11
2

Você estava muito perto. Você só precisava de dois \ . Isso porque um dos conjuntos é para o texto em si que passa pelo BASH, e o outro seria o% real\ que está sendo analisado pelo awk. Isso parece funcionar para mim:

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

E dá:

ABC/G
    
por 29.06.2016 / 16:01