examples - Coincidencia negativa utilizando grep(líneas de coincidencia que no contienen foo)




windows ubuntu (4)

He estado tratando de resolver la sintaxis de este comando:

grep ! error_log | find /home/foo/public_html/ -mmin -60

o

grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60

Necesito ver todos los archivos que se han modificado, excepto los llamados error_log .

He leído sobre esto aquí , pero solo encontré un patrón not regex.


Answers

grep -v es tu amigo

grep --help | grep invert  

-v, --invertir-coincidir seleccionar líneas no coincidentes

También puedes ver el -L relacionado (el complemento de -l ).

-L, - archivos sin coincidencia solo imprimen los nombres de ARCHIVOS que no contienen ninguna coincidencia


En su caso, presumiblemente no desea utilizar grep, sino que agregue una cláusula negativa al comando de búsqueda, por ejemplo

find /home/baumerf/public_html/ -mmin -60 -not -name error_log

Si desea incluir caracteres comodín en el nombre, deberá evitarlos, por ejemplo, para excluir archivos con el sufijo .log:

find /home/baumerf/public_html/ -mmin -60 -not -name \*.log

También puede usar awk para estos fines, ya que le permite realizar verificaciones más complejas de una manera más clara:

Líneas que no contienen foo :

awk '!/foo/'

Líneas que no contienen ni foo ni bar :

awk '!/foo/ && !/bar/'

Líneas que no contienen ni foo ni bar pero que contienen foo2 o bar2 :

awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'

Y así.


En CentOS 6.6 / Grep 2.6.3, tengo que usarlo así:

grep "term" -Hnir --include \*.php --exclude-dir "*excluded_dir*"

Observe la falta de signos iguales "=" (de lo --include , se --include , --include , include-dir y --exclude-dir )