Pregunta Coincidencia negativa usando grep (líneas de coincidencia que no contienen foo)


He estado tratando de resolver la sintaxis para 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 a excepción de los nombrados error_log.

Lo he leído aquí, pero solo encontré uno notpatrón regex.


667
2017-08-23 14:24


origen


Respuestas:


grep -v es tu amigo:

grep --help | grep invert  

-v, --invert-match selecciona líneas que no coinciden

También echa un vistazo a los relacionados -L (el complemento de -l)

-L, --file-without-match solo imprime nombres FILE que no coinciden


1238
2017-08-23 14:25



También puedes usar awk para estos propósitos, ya que le permite realizar comprobaciones 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 contiene foo2 o bar2:

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

Y así.


73
2018-06-19 22:34



En su caso, presumiblemente no desea usar grep, sino que agrega una cláusula negativa al comando find, p.

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

Si desea incluir comodines en el nombre, tendrá que escapar de ellos, p. para excluir archivos con el sufijo .log:

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

8
2017-11-02 13:33