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