In unserem ersten Artikel über den grep-Befehl haben wir einige Funktionen behandelt, die das Tool bietet, darunter, 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 mehr. Abgesehen davon bietet das Tool einige weitere leicht verständliche und nützliche Funktionen. In diesem Artikel werden wir einige davon besprechen.
Bitte beachten Sie, dass alle in diesem Tutorial erwähnten Beispiele auf Ubuntu 14.04LTS getestet wurden. Außerdem werden wir die folgende Datei (test_file1.txt) für alle unsere grep-bezogenen Beispiele in diesem Tutorial verwenden:
Suche ohne Berücksichtigung der Groß-/Kleinschreibung mit Grep
Standardmäßig unterscheidet grep zwischen Groß- und Kleinschreibung, was bedeutet, dass es beispielsweise „ABC“ und „abc“ getrennt behandelt. Wenn Sie jedoch möchten, dass bei Ihrer Suche die Groß-/Kleinschreibung nicht beachtet wird, können Sie das -i verwenden Befehlszeilenoption.
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ß-/Kleinschreibung für Eingabedateien ebenfalls 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.)
Wir konnten jedoch das Verhalten im Zusammenhang mit Eingabedateien auf unserer Seite nicht reproduzieren.
Zeige bestimmte nicht übereinstimmende Zeilen mit Zeilen, die übereinstimmende Zeichenfolgen in Grep enthalten
Mit dem Tool können Sie auch eine bestimmte Anzahl von Zeilen nach, vor oder um die Zeile mit dem übereinstimmenden String anzeigen.
Verwenden Sie das -A Befehlszeilenoption zum Drucken von 'N' Zeilen nach der übereinstimmenden Zeile.
$ 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:
Verwenden Sie schließlich die Befehlszeilenoption -C, um Zeilen um die übereinstimmende Zeile herum auszugeben.
$ grep -C N [string-to-be-searched] [filename]
Zum Beispiel:
$ grep -C 2 "linux" test_file1.txt
Hier ist die erfasste Ausgabe:
Nur übereinstimmende Strings in Grep drucken
Sie dürfen auch nur die übereinstimmende Zeichenfolge auf der Standardausgabe ausgeben (anstelle von vollständigen Zeilen, die standardmäßig angezeigt werden). Auf diese Funktion kann mit der Befehlszeilenoption -o zugegriffen werden.
$ grep -o [string-to-be-searched] [filename]
Wenn beispielsweise eine Zeichenfolge „linux“ in einer Datei gesucht werden soll (aber keine vollständigen Zeilen gedruckt werden sollen), verwenden wir den folgenden Befehl.
$ grep -o "linux" [file-name]
Wir können auch Platzhalterzeichen wie * und .* verwenden, um mehr als eine Zeichenfolge zu erfassen. Wenn wir beispielsweise eine Gruppe von Wörtern suchen möchten, die mit „how“ beginnen und mit „linux“ enden, können wir den folgenden Befehl verwenden.
$ grep -o “how.*linux” [file-name]
Position in Grep anzeigen
Mit dem Befehl grep können Sie auch den Byte-Offset der Zeile anzeigen, in der der übereinstimmende String vorkommt. Auf diese Funktion kann mit der Befehlszeilenoption -b zugegriffen werden. Aber zur besseren Verwendung dieser Option können Sie sie 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
Möglicherweise benötigen Sie nicht alle diese Optionen jeden Tag, aber Sie sollten sie zumindest kennen, da Sie nie wissen, wann sie nützlich sein könnten. Grep wird noch leistungsfähiger, wenn es mit regulären Ausdrücken verwendet wird, aber wir werden dieses Thema für einen anderen Tag aufheben.