
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 Fail
o fail
pero 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