print gawk

gawk - print - Awk de GNU: acceso a grupos capturados en texto de reemplazo



awk print (2)

Por el manual gawk

gensub proporciona una característica adicional que no está disponible en sub o gsub: la capacidad de especificar componentes de una expresión regular en el texto de reemplazo. Esto se hace usando paréntesis en la expresión regular para marcar los componentes y luego especificando ''/ N'' en el texto de reemplazo, donde N es un dígito del 1 al 9.

Debe usar gensub, debe especificar "g" y debe obtener el resultado de gensub, ya que no se modifica en el lugar.

awk ''{ r = gensub(/a(b*)c/, "Here are bees: //1", "g"); print r; }''

Esto parece que debería ser muy simple, pero el comportamiento awk gensub / gsub / sub siempre me ha resultado poco claro, y ahora simplemente no puedo hacer lo que dice la documentación que debe hacer (y qué experiencia con un millón otras herramientas similares sugieren que debería funcionar). Específicamente, quiero acceder a "grupos capturados" desde una expresión regular en la cadena de reemplazo. Esto es lo que creo que la sintaxis awk debería ser:

awk ''{ gsub(/a(b*)c/, "Here are bees: /1"); print; }''

Eso debería convertir "abbbc" en "Aquí están las abejas: bbb". No lo hace, al menos no para mí en Ubunutu 9.04. En cambio, el "/ 1" se representa como un ^ A; es decir, el carácter con código 1. No es lo que quiero, claro. ¿Cómo hago esto?

Gracias.


echo abbc | awk ''{ print gensub(/a(b*)c/, "Here are bees: //1", "g", $1);}''

Vea el manual here para ver la diferencia entre gsub y gensub