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

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" 

Responder

Puede simplificar todo el asunto si usa el formato // para gsub:

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

Entonces, podría simplificar aún más usando print sin argumentos (que es lo mismo que print $0) o la 1 abreviatura para imprimir (la acción awk predeterminada para expresiones que se evalúan como verdaderas, como 1; es imprimir la línea actual):

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

Personalmente, sin embargo, no «usaría awk para 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 

Respuesta

Estuviste muy cerca. Solo necesita dos \. Esto se debe a que uno de set es para el texto en sí que pasa por BASH, y el otro sería el \ real que está siendo analizado por awk. Esto parece funcionar para mí:

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

Y da:

ABC/G 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *