it-swarm.com.de

Negativer Abgleich mit grep (Abgleich von Zeilen, die kein foo enthalten)

Ich habe versucht, die Syntax für diesen Befehl zu erarbeiten:

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

oder

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

Ich muss alle Dateien sehen, die geändert wurden, mit Ausnahme der Dateien mit dem Namen error_log.

Ich habe es hier gelesen , habe aber nur ein not- Regex-Muster gefunden.

869
jerrygarciuh

grep -v ist dein Freund:

grep --help | grep invert  

-v, --invert-match wählt nicht passende Zeilen aus

Schauen Sie sich auch den zugehörigen -L an (die Ergänzung von -l).

-L, --files-without-match gibt nur Dateinamen aus, die keine Übereinstimmung enthalten

1577
Motti

Sie können awk auch für diese Zwecke verwenden, da Sie auf diese Weise komplexere Überprüfungen durchführen können:

Zeilen ohne foo:

awk '!/foo/'

Zeilen, die weder foo noch bar enthalten:

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

Zeilen, die weder foo noch bar enthalten und entweder foo2 oder bar2 enthalten:

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

Und so weiter.

117
fedorqui

In Ihrem Fall möchten Sie vermutlich nicht grep verwenden, sondern stattdessen eine negative Klausel zum find-Befehl hinzufügen, z.

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

Wenn Sie Platzhalter in den Namen aufnehmen möchten, müssen Sie sie maskieren, z. So schließen Sie Dateien mit dem Suffix .log aus:

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