Necesito buscar una palabra clave usando awk, pero quiero realizar una búsqueda que no distinga entre mayúsculas y minúsculas (no distingue entre mayúsculas y minúsculas).
Creo que el mejor enfoque es capitalizar tanto el término de búsqueda ("palabra clave") como la línea objetivo que awk está leyendo al mismo tiempo. De esta pregunta, sé cómo usar toupperpara imprimir en mayúsculas, pero no sé cómo usarlo en una coincidencia porque esa respuesta solo muestra la impresión y no deja el texto en mayúscula en una variable.
Aquí hay un ejemplo, dada esta entrada:
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla
Me gustaría esta salida:
I want all
these text and numbers 123
and chars !"£$%&
as output
Esto es lo que tengo, pero no sé cómo agregar toupper:
awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt
fuente

awk 'toupper($0)~/&&&KEY WORD&&&/ { p = ! p ; next } ; p;' text.txt. No es necesario elBEGINbloque y, dado que la acción predeterminada es imprimir,p;es suficiente.BEGINbloque" ya que una variable no inicializada se evalúa como falsa.tolowerestá presente en versiones antiguas (o no tan antiguas) de sistemas awk (ej .: AIX), perotoupperno siempre está disponible ^^.gawk tiene una
IGNORECASEvariable incorporada que, si se establece en cero, hace que todas las comparaciones de cadenas y expresiones regulares no distingan entre mayúsculas y minúsculas. Podrías usar eso:Sin
gawkembargo, esto es específico de , pero me parece más legible que la alternativa (más portátil) de meuh. Si eso es un problema, por supuesto, depende totalmente de usted.fuente