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