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 toupper
para 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 elBEGIN
bloque y, dado que la acción predeterminada es imprimir,p;
es suficiente.BEGIN
bloque" ya que una variable no inicializada se evalúa como falsa.tolower
está presente en versiones antiguas (o no tan antiguas) de sistemas awk (ej .: AIX), perotoupper
no siempre está disponible ^^.gawk tiene una
IGNORECASE
variable 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
gawk
embargo, 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