In Linux- und Unix-Systemen ist Grep, kurz für „global regular expression print“, ein Befehl, der zum Suchen und Vergleichen von Textdateien verwendet wird, die in den regulären Ausdrücken enthalten sind. Außerdem ist der Befehl in jeder Linux-Distribution vorinstalliert. In diesem Leitfaden werden wir uns anhand einiger Beispiele die allgemeine Verwendung von grep-Befehlen ansehen.
Grep-Befehl unter Linux
Der Grep-Befehl kann verwendet werden, um einen regulären Ausdruck oder eine Zeichenfolge in einer Textdatei zu finden oder zu durchsuchen. Um dies zu demonstrieren, erstellen wir eine Textdatei welcome.txt und fügen Sie einige Inhalte wie gezeigt hinzu.
Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.
Groß! Jetzt sind wir bereit, ein paar grep-Befehle auszuführen und die Ausgabe zu manipulieren, um die gewünschten Ergebnisse zu erhalten.
Um nach einer Zeichenfolge in einer Datei zu suchen, führen Sie den folgenden Befehl aus
Syntax
$ grep "string" file name
ODER
$ filename grep "string"
Beispiel :
$ grep "Linux" welcome.txt
Ausgabe
Wie Sie sehen können, hat grep nicht nur die Zeichenfolge „Linux“ gesucht und abgeglichen, sondern auch die Zeilen gedruckt, in denen die Zeichenfolge vorkommt.
Wenn sich die Datei in einem anderen Dateipfad befindet, achten Sie darauf, den Dateipfad wie unten gezeigt anzugeben
$ grep "string" /path/to/file
Einfärben von Grep-Ergebnissen mit der Option –color
Wenn Sie auf einem System arbeiten, das die Suchzeichenfolge oder das Suchmuster nicht in einer anderen Farbe als der Rest des Textes anzeigt, verwenden Sie die --color
um Ihre Ergebnisse hervorzuheben.
Beispiel
$ grep --color "free and opensource" welcome.txt
Ausgabe
Rekursive Suche nach einem String in allen Verzeichnissen
Wenn Sie in Ihrem aktuellen Verzeichnis und allen anderen Unterverzeichnissen nach einer Zeichenfolge suchen möchten, suchen Sie mit - r
Flagge wie gezeigt
$ grep -r "string-name" *
Zum Beispiel
$ grep -r "linux" *
Ausgabe
Groß-/Kleinschreibung ignorieren
Im obigen Beispiel lieferten unsere Suchergebnisse das, was wir wollten, da die Zeichenfolge „Linux“ in Großbuchstaben angegeben wurde und auch in Großbuchstaben in der Datei vorhanden ist. Versuchen wir nun, die Zeichenfolge in Kleinbuchstaben zu suchen.
$ grep "linux" file name
Nichts von der Ausgabe, richtig? Dies liegt daran, dass Grepping die Zeichenfolge „linux“ nicht finden und abgleichen konnte, da der erste Buchstabe klein geschrieben ist. Um die Groß-/Kleinschreibung zu ignorieren, verwenden Sie -i
markieren und den folgenden Befehl ausführen
$ grep -i "linux" welcome.txt
Ausgabe
Großartig, nicht wahr? Das - i
wird normalerweise verwendet, um Zeichenfolgen unabhängig von ihrer Groß-/Kleinschreibung anzuzeigen.
Zählen Sie die Zeilen, in denen Zeichenfolgen mit der Option -c übereinstimmen
Um die Gesamtzahl der Zeilen zu zählen, in denen das Zeichenfolgenmuster erscheint oder sich befindet, führen Sie den folgenden Befehl aus
$ grep -c "Linux" welcome.txt
Ausgabe
Mit Grep die Ausgabe invertieren
Um die Grep-Ausgabe umzukehren, verwenden Sie -v
Flagge. Das -v
Die Option weist grep an, alle Zeilen auszugeben, die den Ausdruck nicht enthalten oder nicht übereinstimmen.
Die Option –v weist grep an, seine Ausgabe zu invertieren, was bedeutet, dass statt übereinstimmende Zeilen das Gegenteil zu tun und alle Zeilen zu drucken, die nicht mit dem Ausdruck übereinstimmen. Gehen wir zurück zu unserer Datei, lassen Sie uns die Zeilennummern wie gezeigt anzeigen.
Drücken Sie ESC im Vim-Editor, geben Sie einen vollständigen Doppelpunkt ein, gefolgt von
set nu
Drücken Sie als Nächstes die Eingabetaste
Ausgabe
Um nun die Zeilen anzuzeigen, die die Zeichenfolge „Linux“ nicht enthalten, führen Sie
aus$ grep -v "Linux" welcome.txt
Ausgabe
Wie Sie sehen, hat grep die Zeilen angezeigt, die das Suchmuster nicht enthalten.
Nummerieren Sie die Zeilen, die das Suchmuster enthalten, mit der Option -n
Um die Zeilen zu nummerieren, in denen das Zeichenfolgenmuster übereinstimmt, verwenden Sie -n
Option wie gezeigt
$ grep -n "Linux" welcome.txt
Ausgabe
Suche mit der Option -w nach genau passenden Wörtern
Übergeben Sie dann -w
flag sucht nach der Zeile, die das genau passende Wort enthält, wie gezeigt
$ grep -w "opensource" welcome.txt
Ausgabe
Wenn Sie es jedoch versuchen
$ grep -w "open" welcome.txt
Es werden KEINE Ergebnisse zurückgegeben, da wir nicht nach einem Muster suchen, sondern nach einem exakten Wort!
Verwendung von Pipes mit grep
Der Befehl grep kann zusammen mit Pipes verwendet werden, um eine eindeutige Ausgabe zu erhalten.
Wenn Sie beispielsweise wissen möchten, ob ein bestimmtes Paket im Ubuntu-System installiert ist, führen Sie es aus
$ dpkg -L | grep "package-name"
Um beispielsweise herauszufinden, ob OpenSSH in Ihrem System installiert wurde, geben Sie dpkg -l
ein Befehl grep wie gezeigt
$ dpkg -L | grep -i "openssh"
Ausgabe
Anzeige der Zeilenanzahl vor oder nach einem Suchmuster mit Pipes
Sie können das -A verwenden oder -B um die Anzahl der Zeilen anzuzeigen, die entweder vor oder nach der Suchzeichenfolge stehen. Das -A Flag bezeichnet die Zeilen, die nach dem Suchstring und -B kommen druckt die Ausgabe, die vor der Suchzeichenfolge erscheint.
Zum Beispiel
$ ifconfig | grep -A 4 ens3
Dieser Befehl zeigt die Zeile mit der Zeichenfolge plus 4 Textzeilen nach dem ens an String in ifconfig
Befehl.
Ausgabe
Umgekehrt zeigt die Verwendung des Flags -B im folgenden Beispiel die Zeile mit der Suchzeichenfolge plus 3 Textzeilen vor dem ether an String in ifconfig
Befehl.
Ausgabe
$ ifconfig | grep -B 4 ether
Verwendung von grep mit regulären Ausdrücken (REGEX)
Der Begriff REGEX ist ein Akronym für REG ular EX Druck. Ein REGEX ist eine Folge von Zeichen, die verwendet wird, um ein Muster abzugleichen. Nachfolgend einige Beispiele:
^ Matches characters at the beginning of a line
$ Matches characters at the end of a line
"." Matches any character
[a-z] Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets
Beispiel
Zum Drucken von Zeilen, die mit einem bestimmten Zeichen beginnen, lautet die Syntax;
grep ^character file_name
Um beispielsweise die Zeilen anzuzeigen, die in unserer Datei welcome.txt mit dem Buchstaben „d“ beginnen, würden wir
ausführen$ grep ^d welcome.txt
Ausgabe
Um Zeilen anzuzeigen, die mit dem Buchstaben „x“ enden, führen Sie
aus$ grep x$ welcome.txt
Ausgabe
Hilfe zu weiteren Grep-Optionen erhalten
Wenn Sie mehr über die Verwendung des Grep-Befehls erfahren möchten, führen Sie den folgenden Befehl aus, um eine Vorschau auf andere Flags oder Optionen zu erhalten, die Sie zusammen mit dem Befehl verwenden können.
$ grep --help
Beispielausgabe
Wir danken Ihnen, dass Sie sich die Zeit genommen haben, dieses Tutorial durchzugehen. Probieren Sie die Befehle gerne aus und lassen Sie uns wissen, wie es gelaufen ist.