2011-03-08 11 views
14

El siguiente comando funciona como se esperaba.ignorecase en AWK

# some command | awk '/(\<^create\>|\<^alter\>|\<^drop\>)/,/;/' 
create table todel1 (id int) max_rows=2 
/*!*/; 
alter table todel1 engine=InnoDB 
/*!*/; 
create database common 
/*!*/; 
create database rules 
/*!*/; 

Pero coincide sólo con la letra minúscula "crear", "alterar", etc. Quiero usar el interruptor IGNORECASE en el estado de awk de modo que le proporcione todas las instancias del término de búsqueda.

Respuesta

14

Añadir IGNORECASE = 1; al comienzo de su comando awk así:

bash-3.2$ echo "Create" | awk '/^create/;' 
bash-3.2$ echo "Create" | awk 'IGNORECASE = 1;/^create/;' 
Create 
+11

Configúrelo en el bloque 'BEGIN' o en la línea de comando, ya que no necesita ejecutarse para cada línea de entrada. –

+4

Tenga en cuenta que esto es un 'gawk'ism. Y para el segundo punto de Dennis, quiere decir algo como: 'awk '/ montón de expresiones regulares aquí /' IGNORECASE = 1' – SiegeX

+1

Esto no funciona en la versión awk 20070501, al menos. 'echo" No hay coincidencia "| awk 'IGNORECASE = 1;/^ create /;' 'da' No match'. No parece agregar la instrucción If implícita si tiene algo además de la expresión regular. – ceyko

5

Otra opción para aquellos que tienen un viejo awk donde la bandera IGNORECASE es inútil:

echo "CreAte" | awk '/^[Cc][Rr][Ee][Aa][Tt][Ee]/;' 
+1

'aquellos que tienen un viejo awk' ... como usuarios de Mac :( –

+0

Última respuesta, lo sé pero ... intente instalar la versión' GNU': http://brewformulas.org/Gawk @JelMellon – klashxx

12

La siguiente línea ejecuta una prueba OR en lugar de AND:

echo -e "Create\nAny text" | awk 'IGNORECASE = 1;/^create/;' 
Create 
Create 
Any text 

La palabra especial BEGIN resuelta th e problema:

echo -e "Create\nAny text" | awk 'BEGIN{IGNORECASE = 1}/^create/;' 
Create 

Espero que esto ayude.

Sebastien.