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:
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
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
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:
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:
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]
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]
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:
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.