
grep
ist ein leistungsstarkes Befehlszeilentool, das verwendet wird, um eine oder mehrere Eingabedateien nach Zeilen zu durchsuchen, die mit einem regulären Ausdruck übereinstimmen, und jede übereinstimmende Zeile in die Standardausgabe schreibt.
In diesem Artikel zeigen wir Ihnen, wie Sie bei der Suche mit grep
ein oder mehrere Wörter, Muster oder Verzeichnisse ausschließen .
Wörter und Muster ausschließen #
Um nur die Zeilen anzuzeigen, die keinem Suchmuster entsprechen, verwenden Sie den -v
( oder --invert-match
)-Option.
Zum Beispiel, um die Zeilen zu drucken, die nicht die Zeichenfolge nologin
enthalten Sie würden verwenden:
grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Das -w
Option teilt grep
mit um nur die Zeilen zurückzugeben, in denen die angegebene Zeichenfolge ein ganzes Wort ist (umschlossen von Nicht-Wort-Zeichen).
Standardmäßig grep
unterscheidet zwischen Groß- und Kleinschreibung. Das bedeutet, dass Groß- und Kleinschreibung als unterschiedlich behandelt werden. Um die Groß-/Kleinschreibung bei der Suche zu ignorieren, rufen Sie grep
auf mit dem -i
Option.
Wenn die Suchzeichenfolge Leerzeichen enthält, müssen Sie sie in einfache oder doppelte Anführungszeichen einschließen.
Um zwei oder mehr Suchmuster anzugeben, verwenden Sie -e
Möglichkeit:
grep -wv -e nologin -e bash /etc/passwd
Sie können das -e
verwenden Option so oft Sie möchten.
Eine weitere Möglichkeit, mehrere Suchmuster auszuschließen, besteht darin, die Muster mit dem OR-Operator |
zu verbinden .
Das folgende Beispiel gibt die Zeilen aus, die die Zeichenfolgen nologin
nicht enthalten oder bash
:
grep -wv 'nologin\|bash' /etc/passwd
GNU grep
unterstützt drei Syntaxen für reguläre Ausdrücke:Basic, Extended und Perl-kompatibel. Standardmäßig grep
interpretiert das Muster als einfachen regulären Ausdruck, bei dem die Metazeichen wie |
verlieren ihre besondere Bedeutung, und Sie müssen ihre Versionen mit umgekehrten Schrägstrichen verwenden.
Wenn Sie die erweiterte reguläre Ausdrucksoption -E
verwenden , dann den Operator |
sollte nicht maskiert werden, wie unten gezeigt:
grep -Ewv 'nologin|bash' /etc/passwd
Sie können verschiedene mögliche Übereinstimmungen angeben, die wörtliche Zeichenfolgen oder Ausdruckssätze sein können. Im folgenden Beispiel sind die Zeilen, in denen die Zeichenfolge games
ganz am Anfang einer Zeile auftreten, werden ausgeschlossen:
grep -v "^games" file.txt
Die Ausgabe eines Befehls kann mit grep
gefiltert werden durch Paspeln, und nur die Linien, die einem bestimmten Muster entsprechen, werden auf dem Terminal gedruckt.
Um beispielsweise alle laufenden Prozesse auf Ihrem System außer denen auszudrucken, die als Benutzer „root“ laufen, können Sie die Ausgabe von ps
filtern Befehl:
ps -ef | grep -wv root
Verzeichnisse und Dateien ausschließen #
Manchmal bei einer rekursiven Suche mit -r
oder -R
Optionen möchten Sie möglicherweise bestimmte Verzeichnisse aus dem Suchergebnis ausschließen.
-r
oder -R
options ist das, wenn grep mit dem Großbuchstaben R
aufgerufen wird es folgt allen symbolischen Links
Um ein Verzeichnis von der Suche auszuschließen, verwenden Sie --exclude-dir
Möglichkeit. Der Pfad zum ausgeschlossenen Verzeichnis ist relativ zum Suchverzeichnis.
Hier ist ein Beispiel, das zeigt, wie man nach der Zeichenfolge linuxize
sucht in allen Dateien innerhalb von /etc
, mit Ausnahme von /etc/pki
Verzeichnis:
grep -R --exclude-dir=pki linuxize /etc
Um mehrere Verzeichnisse auszuschließen, schließen Sie die ausgeschlossenen Verzeichnisse in geschweifte Klammern ein und trennen Sie sie durch Kommas ohne Leerzeichen.
Zum Beispiel, um Dateien zu finden, die die Zeichenfolge „gnu“ in Ihrem Linux-System enthalten, ohne den proc
, boot
, und sys
Verzeichnisse, die Sie ausführen würden:
grep -r --exclude-dir={proc,boot,sys} gnu /
Wenn Sie Wildcard-Matching verwenden, können Sie Dateien ausschließen, deren Basisname mit dem in --exclude
angegebenen GLOB übereinstimmt Option.
Im folgenden Beispiel durchsuchen wir alle Dateien im aktuellen Arbeitsverzeichnis nach der Zeichenfolge linuxize
, mit Ausnahme der Dateien, die auf .png
enden und .jpg
Verzeichnis:
grep -rl --exclude=*.{png,jpg} linuxize *
Schlussfolgerung #
Das grep
Der Befehl ermöglicht es Ihnen, Muster und Verzeichnisse bei der Suche nach Dateien auszuschließen.