Wie man mit Grep eine Mustersuche in Dateien durchführt

In unserem ersten Artikel über den grep-Befehl haben wir eine Reihe von Funktionen behandelt, die das Tool bietet, u.a. wie Sie es verwenden können, um nur nach Wörtern zu suchen, nach zwei Wörtern zu suchen, Zeilen mit übereinstimmenden Wörtern zu zählen und vieles mehr. Abgesehen davon bietet das Tool einige einfach zu verstehende und nützliche Funktionen. In diesem Artikel werden wir eine Handvoll davon besprechen.

Bitte beachten Sie, dass alle in diesem Tutorial erwähnten Beispiele auf Ubuntu 22.04 getestet wurden. Außerdem werden wir die folgende Datei (test_file1.txt) für alle unsere grep-bezogenen Beispiele in diesem Tutorial verwenden:

grep-Testdatei

Groß- und Kleinschreibung wird bei der Suche mit Grep nicht berücksichtigt

Standardmäßig wird bei grep zwischen Groß- und Kleinschreibung unterschieden, d.h. es werden z.B. ‚ABC‘ und ‚abc‘ getrennt behandelt. Wenn Sie jedoch die Groß- und Kleinschreibung bei Ihrer Suche nicht berücksichtigen wollen, können Sie die Befehlszeilenoption -i verwenden.

grep -i [string-to-be-searched] [filename]

Zum Beispiel:

grep -i "linux" test_file1.txt

Groß- und Kleinschreibung wird bei der Suche mit grep nicht berücksichtigt

Hinweis: Nicht nur Muster (z.B. ‚linux‘ im obigen Beispiel), die grep-Manpage sagt, dass die Option -i auch dafür sorgt, dass die Groß- und Kleinschreibung bei Eingabedateien ignoriert wird. Hier ist der Auszug:

 -i, --ignore-case
 Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)

Allerdings konnten wir das Verhalten der Eingabedateien an unserem Ende nicht reproduzieren.

Bestimmte nicht übereinstimmende Zeilen mit einer Zeile, die eine übereinstimmende Zeichenfolge enthält, in Grep anzeigen

Mit dem Werkzeug können Sie auch eine bestimmte Anzahl von Zeilen nach, vor oder um die Zeile, die die übereinstimmende Zeichenfolge enthält, anzeigen.

Verwenden Sie die Befehlszeilenoption -A, um ‚N‘ Zeilen nach der übereinstimmenden Zeile zu drucken.

$ grep -A N [string-to-be-searched] [filename]

Zum Beispiel:

$ grep -A 2 "linux" test_file1.txt

Hier ist die Ausgabe des obigen Befehls

Anzeige bestimmter nicht übereinstimmender Zeilen mit einer Zeile, die eine übereinstimmende Zeichenfolge in grep enthält

In ähnlicher Weise wird die Befehlszeilenoption -B verwendet, um Zeilen vor der übereinstimmenden Zeile anzuzeigen.

$ grep -B N [string-to-be-searched] [filename]

Zum Beispiel:

$ grep -B 2 "linux" test_file1.txt

Hier ist die Ausgabe:

grep-Ausgabe

Um Zeilen um die übereinstimmende Zeile herum zu drucken, verwenden Sie schließlich die Befehlszeilenoption -C.

$ grep -C N [string-to-be-searched] [filename]

Zum Beispiel:

$ grep -C 2 "linux" test_file1.txt

Hier wird die Ausgabe erfasst:

erfasste Ausgabe

Nur übereinstimmende Zeichenfolgen in Grep drucken

Sie dürfen auch nur die übereinstimmende Zeichenfolge auf der Standardausgabe ausgeben (statt kompletter Zeilen, die standardmäßig angezeigt werden). Auf diese Funktion kann mit der Befehlszeilenoption -o zugegriffen werden.

$ grep -o [string-to-be-searched] [filename]

Wenn es beispielsweise darum geht, eine Zeichenfolge „linux“ in einer Datei zu suchen (aber keine kompletten Zeilen gedruckt werden sollen), dann verwenden wir folgenden Befehl.

$ grep -o "linux" [file-name]

Nur übereinstimmende Zeichenfolgen in grep drucken

Wir können auch Platzhalterzeichen wie * und .* verwenden, um mehr als eine Zeichenfolge zu greifen. Wenn wir zum Beispiel eine Gruppe von Wörtern greifen wollen, die mit „wie“ beginnt und auf „linux“ endet, dann können wir den folgenden Befehl verwenden.

$ grep -o “how.*linux” [file-name]

Ergebnis

Position in Grep anzeigen

Mit dem grep-Befehl können Sie auch den Byte-Offset der Zeile anzeigen, in der die übereinstimmende Zeichenkette vorkommt. Auf diese Funktion kann mit der Befehlszeilenoption -b zugegriffen werden. Zur besseren Nutzung dieser Option können Sie sie jedoch mit der Befehlszeilenoption -o verwenden, die die genaue Position der übereinstimmenden Zeichenfolge anzeigt.

$ grep -o -b [string-to-be-searched] [filename]

Zum Beispiel:

$ grep -o -b "for" test_file1.txt

Hier ist die Ausgabe:

Position in grep anzeigen

Schlussfolgerung

Sie benötigen vielleicht nicht jeden Tag all diese Optionen, aber Sie sollten sie zumindest kennen, da man nie weiß, wann sie nützlich sein könnten. Grep wird noch mächtiger, wenn es mit regulären Ausdrücken verwendet wird, aber wir werden dieses Thema für einen anderen Tag überlassen. Eine anderer Weg zum finden von dateien ist der Befehl find.

Das könnte dich auch interessieren …