1355 Stimmen

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

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

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

OR:

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 hier darüber gelesen aber nur einen gefunden not -Regex-Muster.

2390voto

Motti Punkte 104854

grep -v ist Ihr Freund:

grep --help | grep invert  

-v, --invert-match nicht übereinstimmende Zeilen auswählen

Sehen Sie sich auch die entsprechenden -L (das Komplement von -l ).

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

219voto

fedorqui Punkte 249453

Sie können auch Folgendes verwenden awk für diese Zwecke, da es Ihnen ermöglicht, komplexere Prüfungen auf übersichtlichere Weise durchzuführen:

Zeilen, die nicht enthalten foo :

awk '!/foo/'

Zeilen, die weder foo noch bar :

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

Zeilen, die weder foo noch bar die entweder foo2 o bar2 :

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

Und so weiter.

23voto

Papa Smurf Punkte 345

In Ihrem Fall möchten Sie vermutlich nicht grep verwenden, sondern stattdessen eine negative Klausel an den Befehl find anhängen, z. B.

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

Wenn Sie Platzhalter in den Namen einfügen möchten, müssen Sie diese ausschließen, z. B. um Dateien mit der Endung .log auszuschließen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X