GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So schließen Sie in Grep aus

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.

Der Hauptunterschied zwischen -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.


Linux
  1. So finden Sie eine Datei in Linux

  2. Wie suche ich in bestimmten Dateien, die einem Muster entsprechen?

  3. Wie kann ich in einer Datei nach einem mehrzeiligen Muster suchen?

  4. Wie grep ich rekursiv?

  5. Wie kann ich den Inhalt mehrerer PDF-Dateien durchsuchen?

So suchen Sie in Vim / Vi

So führen Sie eine Mustersuche in Dateien mit Grep durch

So schließen Sie den Grep-Befehl unter Linux aus

So suchen Sie in Nano

So verwenden Sie grep unter Linux

So führen Sie eine Grep-Suche für alle Dateien und in allen Verzeichnissen durch