Archivos grep con expresiones regulares

Archivos grep con expresiones regulares

Tengo un archivo con un montón de líneas de registro.

Quiero devolver archivos que contengan la palabra "fallar", pero que no contengan el patrón:

Failed any test here _fr in Pro-any text here

Entonces, si contiene: _fr en Pro-

Luego ignore la línea incluso si tiene la palabra fallar.

Respuesta1

Consideremos este archivo de prueba:

$ cat >test.log
keep fail
omit fail  _fr in Pro-

Para encontrar todas las líneas que coinciden con sus criterios:

$ awk '/[fF]ail/ && ! /_fr in Pro-/' test.log
keep fail

Para imprimir solo los nombres de los archivos que tienen líneas que coinciden con sus criterios:

$ awk '/[fF]ail/ && ! /_fr in Pro-/ {print FILENAME; exit}' *.log
test.log

Cómo funciona:

Awk lee implícitamente un archivo línea por línea. La condición /[fF]ail/ && ! /_fr in Pro-/coincide con cualquier línea que contenga Failo failpero no contenga _fr in Pro-. En awk &&significa lógico-y y !significa lógico-no.

Rechazando tanto _fr in Pro-y_en in Pro-

Considere este archivo de prueba:

$ cat test.log
keep fail
omit fail  _fr in Pro-
omit fail  _en in Pro-

Para rechazar ambas formas:

$ awk '/[fF]ail/ && ! /_(fr|en) in Pro-/' test.log
keep fail

información relacionada