usando gsub en awk para reemplazar una palabra con paréntesis

1

Hola, ¿cómo puedo usar gsub para reemplazar una palabra que tiene paréntesis?

Aquí quiero reemplazar ABC (T) con ABC / G

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

Respuestas:

4

Podría simplificar todo si usa el //formato para gsub:

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

Luego, podría simplificar aún más si usa printsin argumentos (que es lo mismo que print $0) o la 1abreviatura para imprimir (la awkacción predeterminada para expresiones que se evalúan como verdaderas, como 1;imprimir la línea actual):

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

Personalmente, sin embargo, no lo usaría awkpara esto, la sintaxis es más corta y limpia con otras herramientas:

$ echo "ABC(T)" | sed 's|ABC(T)|ABC/G|'
ABC/G

$ echo "ABC(T)" | perl -pe 's|ABC\(T\)|ABC/G|'
ABC/G
terdon
fuente
2

Estabas muy cerca. Solo necesitabas dos \. Esto se debe a que uno de los conjuntos es para el texto en sí que pasa por BASH, y el otro sería el real \que awk analiza. Esto parece funcionar para mí:

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

Y da:

ABC/G
Ding
fuente