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

Finden Sie Text in Dateien unter Linux mit grep

Dieses Tutorial konzentriert sich auf das Suchen von Text in Dateien mit dem grep-Befehl und regulären Ausdrücken.

Wenn Sie auf einem Linux-System arbeiten, Suchen von Text in Dateien ist eine sehr häufige Aufgabe, die jeden Tag von Systemadministratoren ausgeführt wird.

Vielleicht möchten Sie nach bestimmten Zeilen suchen in einer Protokolldatei, um Serverprobleme zu beheben.

In einigen Fällen sind Sie daran interessiert, Aktionen zu finden, die von bestimmten Benutzern ausgeführt wurden, oder Sie möchten die Zeilen einer großen Datei auf wenige Zeilen beschränken.

Glücklicherweise gibt es unter Linux mehrere Möglichkeiten, Text in Dateien zu finden aber der beliebteste Befehl ist der grep-Befehl.

Von Ken Thompson in den frühen Tagen von Unix entwickelt, grep (g global nach einem r suchen zB e xpression und p drucken ) wird seit mehr als 45 Jahren von Systemadministratoren auf der ganzen Welt verwendet.

In diesem Tutorial konzentrieren wir uns auf den grep-Befehl und wie es uns helfen kann, Text in Dateien überall in unserem System effektiv zu finden.

Bereit?

Grep-Syntax unter Linux

Wie oben angegeben, um Text in Dateien unter Linux zu finden , müssen Sie den grep-Befehl mit der folgenden Syntax

verwenden
$ grep <option> <expression> <path>

Beachten Sie, dass die Optionen und der Pfad optional sind.

Bevor wir alle von grep bereitgestellten Optionen auflisten und detailliert aufführen, wollen wir uns kurz die Syntax des grep-Befehls merken.

Um sich an die Syntax des grep-Befehls zu erinnern, denken Sie daran, dass grep als grEP geschrieben werden kann was bedeutet, dass der Ausdruck vor dem Pfad steht.

Dies ist eine großartige Möglichkeit, sich gleichzeitig die grep-Syntax und die find-Syntax zu merken, aber die find-Syntax ist genau das Gegenteil:Pfad zuerst und Ausdruck danach.

Schnelle grep-Beispiele

Es gibt komplexe Optionen, die mit grep verwendet werden können, aber beginnen wir mit einer Reihe sehr kurzer Beispiele.

Auflisten von Benutzern mit grep

Unter Linux werden Benutzerkonten, wie Sie es wahrscheinlich bereits wissen, in einer speziellen Datei namens passwd-Datei aufgelistet.

Um das Root-Konto in einer bestimmten Datei zu finden, geben Sie einfach Ihren Text und die Datei ein, in der Sie suchen möchten.

$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

Eine weitere sehr beliebte Art, den grep-Befehl zu verwenden, besteht darin, nach einem bestimmten Prozess auf Ihrem Linux-System zu suchen.

Prozesse mit grep filtern

Wie in einem unserer vorherigen Tutorials erklärt, müssen Sie die Datei „ps ” Befehl, um alle derzeit auf Ihrem System laufenden Prozesse aufzulisten.

Sie können das „ps “ mit dem Befehl „grep ” Befehl, um die für Sie interessanten Prozesse zu filtern.

$ ps aux | grep <process>

Wenn Sie beispielsweise an Bash-Prozessen interessiert sind, können Sie den folgenden Befehl eingeben

$ ps aux | grep bash

root      1230  0.0  0.0  23068  1640 tty1     S+   Jan11   0:00 -bash
user      2353  0.0  0.1  23340  5156 pts/0    Ss   03:32   0:00 -bash
user      2473  0.0  0.0  14856  1056 pts/0    S+   03:45   0:00 grep --color=auto bash
user      6685  0.0  0.0  23140  1688 pts/2    Ss+  Nov09   0:00 bash

Hinweis :Wenn Sie sich bei der Verwendung von Pipes unter Linux nicht sicher sind, finden Sie hier eine vollständige Anleitung zur Eingabe- und Ausgabeumleitung.

Inspizieren von Linux-Kernel-Protokollen mit grep

Eine weitere großartige Anwendung des grep-Befehls ist die Untersuchung des Linux-Kernel-Pufferrings .

Dies wird häufig bei der Durchführung von Fehlerbehebungsoperationen auf Linux-Systemen verwendet, da der Kernel beim Starten oder Hochfahren in seinen Pufferring schreibt.

Nehmen wir zum Beispiel an, Sie haben eine neue Festplatte in Ihr System eingeführt und sind sich über den Namen dieser neuen Festplatte nicht sicher.

Um diese Informationen herauszufinden, können Sie die Datei „dmesg“ verwenden ”-Befehl und leiten Sie ihn an den grep-Befehl weiter.

$ dmesg | grep -E sd.{1}

Grep-Befehlsoptionen

Der Befehl grep ist an sich sehr nützlich, aber noch nützlicher, wenn er mit Optionen verwendet wird.

Der grep-Befehl hat buchstäblich eine Menge verschiedener Optionen.

Die folgenden Abschnitte dienen als Leitfaden, um diese Optionen richtig zu verwenden, und Beispiele werden dabei gegeben.

Suche nach einer bestimmten Zeichenfolge mit grep

In manchen Fällen möchten Sie vielleicht eine ganz bestimmte Zeichenfolge oder Text in einer Datei finden

Um die Textsuche auf eine bestimmte Zeichenfolge einzuschränken, müssen Sie Anführungszeichen verwenden vor und nach Ihrem Suchbegriff.

$ grep "This is a specific text" .

Um diese Option zu veranschaulichen, nehmen wir an, Sie suchen nach einem bestimmten Nutzernamen auf Ihrem System.

Da viele Benutzernamen mit demselben Präfix beginnen können, müssen Sie den Benutzer in Anführungszeichen suchen.

$ grep "devconnected" /etc/passwd

Text mit regulären Ausdrücken suchen

Eine der großartigsten Funktionen des grep-Befehls ist die Möglichkeit, unter Verwendung regulärer Ausdrücke nach Text zu suchen

Reguläre Ausdrücke sind definitiv ein großartiges Werkzeug, das es zu meistern gilt:Sie ermöglichen es Benutzern, anhand von Mustern nach Text zu suchen, z. B. Text, der mit einem bestimmten Buchstaben beginnt, oder Text, der als E-Mail-Adresse definiert werden kann.

Grep unterstützt zwei Arten von regulären Ausdrücken:Basic und erweitert reguläre Ausdrücke.

Grundlegende reguläre Ausdrücke (BRE)

Der Hauptunterschied zwischen einfachen und erweiterten regulären Ausdrücken besteht darin, dass Sie Symbole für reguläre Ausdrücke mit BRE (Basic Regular Expressions) verwenden können, ihnen muss jedoch ein umgekehrter Schrägstrich vorangestellt werden.

Die gängigsten regulären Ausdrucksmuster werden unten mit Beispielen detailliert beschrieben:

  • ^-Symbol :Dieses kleine Hutsymbol, auch Caret-Symbol genannt, wird verwendet, um den Anfang einer Zeile zu definieren. Folglich wird jeder Text nach dem Caret-Symbol mit Zeilen verglichen, die mit diesem Text beginnen.

Um beispielsweise alle Laufwerke zu finden, die mit „sd“ beginnen (auch als SCSI-Laufwerke bezeichnet), können Sie das Caret-Symbol mit grep verwenden.

$ lsblk | grep "^sb"
  • $ Symbol :Das Dollarzeichen ist das Gegenteil des Caretzeichens, es wird verwendet, um das Ende der Zeile zu definieren. Folglich stoppt der Musterabgleich direkt vor dem Dollarzeichen. Dies ist besonders nützlich, wenn Sie auf einen bestimmten Begriff abzielen möchten.

Um alle Benutzer zu sehen, die eine Bash-Shell auf Ihrem System haben, könnten Sie den folgenden Befehl eingeben

$ cat /etc/passwd | grep "bash$"
  • . (Punktsymbol) :Das Punktsymbol wird verwendet, um ein einzelnes Zeichen in einem regulären Ausdruck zu finden. Dies kann besonders praktisch sein, wenn Suchbegriffe am Anfang und am Ende die gleichen Buchstaben enthalten, aber nicht in der Mitte.

Wenn Sie beispielsweise zwei Benutzer auf Ihrem System haben, einen namens „bob“ und einen namens „bab“, können Sie beide Benutzer finden, indem Sie das Punktsymbol verwenden.

$ cat /etc/passwd | grep "b.b"
  • [ ] (Klammernsymbol) :Dieses Symbol wird verwendet, um nur eine Teilmenge von Zeichen abzugleichen. Wenn Sie nur die Zeichen „a“, „o“ oder „e“ finden möchten, schließen Sie sie in Klammern ein.

Zurück zum „bob“-Beispiel:Wenn Sie Ihre Suche auf „bob“ und „bab“ beschränken möchten, können Sie den folgenden Befehl eingeben

$ cat /etc/passwd | grep "b[ao]b"

Unter Verwendung aller zuvor bereitgestellten Optionen ist es möglich, einzelne Wörter in einer Datei zu isolieren:durch Kombinieren des Caret-Symbols mit dem Dollar-Symbol.

$ grep "^word$" <file|path>

Glücklicherweise müssen Sie diese Zeichen nicht jedes Mal eingeben, wenn Sie nach einzelnen Worteinträgen suchen möchten.

Sie können das „-w verwenden ” statt.

$ grep -w <expression> <file|path>

Erweiterte reguläre Ausdrücke (ERE)

Erweiterte reguläre Ausdrücke sind, wie der Name schon sagt, reguläre Ausdrücke, die komplexere Ausdrücke verwenden, um Zeichenfolgen abzugleichen.

Sie können erweiterte reguläre Ausdrücke verwenden, um einen Ausdruck zu erstellen, der beispielsweise mit einer E-Mail-Adresse übereinstimmt.

Um Text in Dateien mit erweiterten regulären Ausdrücken zu finden, müssen Sie die Option „-E“ verwenden.

$ grep -E <expression> <path>

Eine großartige Verwendung der erweiterten regulären Ausdrücke ist beispielsweise die Möglichkeit, nach mehreren Suchbegriffen zu suchen.

Mehrere Zeichenfolgen in einer Datei suchen

Um nach mehreren Zeichenfolgen in einer Datei zu suchen, verwenden Sie das „-E “ und geben Sie Ihre verschiedenen Suchbegriffe durch gerade Linien getrennt ein (steht für ODER-Operatoren in regulären Ausdrücken )

$ grep -E "text1|text2|text3" <path>

Zurück zu unserem vorherigen grep-Beispiel:Sie konnten das Root-Konto und das Bob-Konto mit erweiterten regulären Ausdrücken finden.

$ grep -E "root|bob" /etc/passwd

Suchen Sie mit grep nach IP-Adressen

In einigen Fällen möchten Sie möglicherweise IP-Adressen in einer einzigen Datei isolieren:Die Verwendung erweiterter regulärer Ausdrücke ist eine großartige Möglichkeit, IP-Adressen einfach zu finden.

Viele verschiedene Websites bieten gebrauchsfertige reguläre Ausdrücke:Wir werden diese für IP-Adressen verwenden.

"\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

Wie würden Sie diesen regulären Ausdruck lesen?

Eine IP-Adresse besteht aus 4 3-stelligen Zahlen, die durch Punkte getrennt sind, genau das beschreibt dieser reguläre Ausdruck.

([0-9]{1,3}\.){3}      = 3 3-digits numbers separated by dots

[0-9]{1,3}             = the last 3-digits number ending the IP address

So würden Sie mit dem grep-Befehl

nach IP-Adressen suchen
grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" <file|path>

Suchen Sie mit grep nach URL-Adressen

Ebenso ist es durchaus möglich, in einer Datei nach URL-Adressen zu suchen, wenn Sie täglich mit der Website-Administration arbeiten.

Auch hier bieten viele Websites reguläre Ausdrücke für URLs, aber wir werden diesen verwenden.

grep -E '(http|https)://[^/"]+' <file|path>

Suchen Sie mit grep nach E-Mail-Adressen

Schließlich ist es möglich, mit erweiterten regulären Ausdrücken nach E-Mail-Adressen zu suchen.

Um E-Mail-Adressen zu finden, verwenden Sie den folgenden regulären Ausdruck

grep -E "\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" <file|path>

Nachdem Sie nun gesehen haben, wie Sie erweiterte reguläre Ausdrücke mit grep verwenden, sehen wir uns an, wie Sie mithilfe von Optionen rekursiv Text in einer Datei finden können.

Text rekursiv mit grep finden

Um unter Linux Text rekursiv zu finden (d. h. alle Verzeichnisse und ihre untergeordneten Elemente zu durchsuchen), müssen Sie „grep“ mit der Option „-r“ (für rekursiv) verwenden.

$ grep -R <expression> <path>

Um beispielsweise nach allen Dateien zu suchen, die das Wort „log“ im Verzeichnis /var/log enthalten, würden Sie

eingeben
$ grep -R "log$" /var/log

Wenn Sie diesen Befehl verwenden, werden Sie sehr wahrscheinlich viele Einträge mit verweigerten Berechtigungen sehen.

Um diese Permission-Denied-Einträge zu ignorieren, leiten Sie die Ausgabe Ihres Befehls nach /dev/null

um
$ grep -R "log$" /var/log 2> /dev/null

Um Text rekursiv zu finden, können Sie auch die Option „-d“ mit der Aktion „recurse“ verwenden.

$ grep -d recurse "log$" /var/log

Das rekursive Suchen nach Text kann ziemlich praktisch sein, wenn Sie versuchen, bestimmte Konfigurationsdateien auf Ihrem System zu finden.

Zeilennummern mit grep drucken

Wie Sie in unseren vorherigen Beispielen sehen können, konnten wir Linien isolieren, die dem angegebenen Muster entsprechen.

Wenn Dateien Tausende von Zeilen enthalten, wäre es mühsam, die Datei zu identifizieren, aber nicht die Zeilennummer.

Glücklicherweise hat die Option grep eine Option, um Zeilennummern zusammen mit den verschiedenen Übereinstimmungen auszugeben.

Um Zeilennummern mit grep anzuzeigen, verwenden Sie einfach das „-n ”-Option.

$ grep -n <expression> <path>

Zurück zu unserem Benutzerlistenbeispiel:Wenn wir wissen möchten, in welcher Zeile sich diese Einträge befinden, würden wir

eingeben
$ grep -n -E "root|bob" /etc/passwd

Suchen Sie Text mit grep unter Verwendung der Option ohne Berücksichtigung der Groß-/Kleinschreibung

In manchen Fällen sind Sie sich nicht sicher, ob der Text in Großbuchstaben geschrieben ist oder Kleinbuchstaben Buchstaben.

Glücklicherweise hat der Befehl grep eine Option, um nach Text in Dateien zu suchen, unter Verwendung einer Option, bei der die Groß-/Kleinschreibung nicht beachtet wird.

Um Text ohne Berücksichtigung der Groß-/Kleinschreibung zu suchen, verwenden Sie einfach das „-i ”-Option.

$ grep -i <expression> <path>

Muster aus grep ausschließen

Grep wird verwendet, um Dateien zu identifizieren, die eine bestimmte Datei enthalten, aber was wäre, wenn Sie genau das Gegenteil tun wollten?

Was ist, wenn Sie auf Ihrem Linux-System Dateien finden möchten, die keine bestimmte Zeichenfolge enthalten?

Dies ist der ganze Zweck der invertierten Suchoption von grep.

Um Dateien auszuschließen, die eine bestimmte Zeichenfolge enthalten, verwenden Sie „grep“ mit der Option „-v“.

$ grep -v <expression> <file|path>

Nehmen wir als kleines Beispiel an, dass Sie drei Dateien haben, aber zwei davon das Wort „log“ enthalten.

Um diese Dateien auszuschließen, müssten Sie mit der Option „-v“ eine invertierte Übereinstimmung durchführen.

Dateinamen mit grep anzeigen

In einigen Fällen sind Sie nicht daran interessiert, Text in Dateien zu finden, sondern nur in ihren Dateinamen.

Um nur Dateinamen und nicht den Dateinamen mit der eigentlichen Ausgabe zu drucken, verwenden Sie die Option „-l“.

$ grep -l <expression> <path>

In unserem vorherigen Beispiel würden wir nicht den Inhalt der Datei erhalten, sondern nur den Dateinamen.

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie Text in Dateien unter Linux ganz einfach finden können

Sie haben gelernt, dass Sie viele verschiedene Optionen verwenden können:einfache reguläre Ausdrücke oder fortgeschrittenere (erweiterte) reguläre Ausdrücke, wenn Sie beispielsweise nach IP-Adressen oder Telefonnummern suchen.

Sie haben auch entdeckt, dass Sie inverse Lookups durchführen können um Dateien nicht zu finden Übereinstimmung mit einem bestimmten Muster auf Ihrem System.

Wenn Sie sich für die Linux-Systemadministration interessieren, haben wir auf der Website einen eigenen Abschnitt dafür, also schauen Sie sich das unbedingt an!


Linux
  1. So verwenden Sie den Grep-Befehl, um Text in Dateien zu finden

  2. Verwenden von sed zum Suchen und Ersetzen von Textdateien in Linux

  3. Linux-Suchbefehle

  4. So finden Sie bestimmten Text mit GREP unter Linux

  5. Linux-Befehl:Wie findet man nur Textdateien?

Verwenden von less zum Anzeigen von Textdateien in der Linux-Befehlszeile

So finden Sie Dateien unter Linux

Grep-Befehl in Linux (Text in Dateien suchen)

Finden Sie große Dateien in Linux

So finden Sie Dateien über die Befehlszeile im Linux-Terminal

Wie man Textdateien mit dem Vim Editor unter Linux mit einem Passwort schützt