Grep-Befehl in Linux/UNIX
Was ist Grep
Grep, kurz für „global regular expression print“, ist ein Befehl zum Suchen und Abgleichen von Textmustern in Dateien, die in den regulären Ausdrücken enthalten sind. Darüber hinaus ist der Befehl in jeder Linux-Distribution vorinstalliert. In diesem Leitfaden werden wir die gängigsten Verwendungen des Grep-Befehls sowie beliebte Anwendungsfälle betrachten.
Grep-Befehl in Linux
Der Grep-Befehl kann verwendet werden, um einen regulären Ausdruck oder eine Zeichenkette in einer Textdatei zu finden oder zu durchsuchen. Um dies zu demonstrieren, erstellen wir eine Textdatei welcome.txt
und fügen wie gezeigt etwas Inhalt 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ßartig! Jetzt sind wir bereit, ein paar grep-Befehle auszuführen und die Ausgabe so zu manipulieren, dass die gewünschten Ergebnisse erzielt werden. Um nach einer Zeichenkette in einer Datei zu suchen, führen Sie den folgenden Befehl aus:
grep "string" file name
ODER
$ filename grep „string“
„`bash
**Example**:
„`bash
$ grep „Linux“ welcome.txt
Ausgabe:
Verwendung des Grep-Kommandos
Wie Sie sehen können, hat grep nicht nur die Zeichenkette „Linux“ durchsucht und abgeglichen, sondern auch die Zeilen ausgegeben, in denen die Zeichenkette vorkommt. Wenn sich die Datei in einem anderen Dateipfad befindet, achten Sie darauf, den Dateipfad wie unten gezeigt anzugeben:
$ grep "string" /path/to/file
```bash
## Farbige Darstellung der Grep-Ergebnisse mit der Option --color
Wenn Sie auf einem System arbeiten, das die Suchzeichenfolge oder das Suchmuster nicht farblich vom Rest des Textes unterscheidet, verwenden Sie die Option "--color", um Ihre Ergebnisse hervorzuheben. Beispiel:
```bash
$ grep --color "free and opensource" welcome.txt
Ausgabe:
Suche nach einer Zeichenfolge rekursiv in allen Verzeichnissen
Wenn Sie nach einer Zeichenfolge in Ihrem aktuellen Verzeichnis und allen Unterverzeichnissen suchen möchten, verwenden Sie das -r
-Flag wie folgt:
grep -r "string-name" *
ZUm Beispiel:
grep -r "linux" *
Ausgabe:
Ignorieren der Groß- und Kleinschreibung
Im obigen Beispiel haben uns unsere Suchergebnisse das geliefert, was wir wollten, da der String „Linux“ in Großbuchstaben angegeben wurde und auch in der Datei in Großbuchstaben existiert. Versuchen wir nun, den String in Kleinbuchstaben zu suchen.
grep "linux" file name
Nichts von der Ausgabe, richtig? Dies liegt daran, dass grepping den String „linux“ nicht finden und abgleichen konnte, da der erste Buchstabe klein geschrieben ist. Um die Groß- und Kleinschreibung zu ignorieren, verwenden Sie das -i
-Flag und führen Sie den folgenden Befehl aus:
grep -i "linux" welcome.txt
Ausgabe:
Genial, nicht wahr? Das -i
wird normalerweise verwendet, um Zeichenfolgen unabhängig von ihrer Groß- und 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 vorkommt, führen Sie den folgenden Befehl aus:
grep -c "Linux" welcome.txt
Ausgabe:
Verwendung von Grep, um die Ausgabe umzukehren
Um die Grep-Ausgabe umzukehren, verwenden Sie das -v-Flag. Die -v-Option weist grep an, alle Zeilen auszugeben, die den Ausdruck nicht enthalten oder mit ihm übereinstimmen. Die -v-Option weist grep an, seine Ausgabe umzukehren, was bedeutet, dass anstelle der übereinstimmenden Zeilen das Gegenteil ausgegeben wird: alle Zeilen, die nicht mit dem Ausdruck übereinstimmen. Kehren wir zu unserer Datei zurück und zeigen wir die Zeilennummern an, wie unten gezeigt. Drücken Sie ESC im Vim-Editor, geben Sie einen Doppelpunkt ein, gefolgt von:
set nu
Als nächstes Enter drücken.
Output
Um die Zeilen anzuzeigen, die nicht die Zeichenfolge „Linux“ enthalten, führen Sie „run“ 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 mit der Option -n enthalten
Um die Zeilen zu nummerieren, in denen das Zeichenfolgenmuster übereinstimmt, verwenden Sie die -n-Option, wie unten gezeigt:
grep -n "Linux" welcome.txt
Ausgabe:
Suche nach genau übereinstimmendem Wort mit der Option -w
Das Übergeben des -w-Flags durchsucht die Zeilen, die das genau übereinstimmende Wort enthalten, wie unten gezeigt:
grep -w "opensource" welcome.txt
Ausgabe:
Wenn Sie jedoch das versuchen:
grep -w "open" welcome.txt
Keine Ergebnisse werden zurückgegeben, da wir nicht nach einem Muster, sondern nach einem exakten Wort suchen!
Verwendung von Pipes mit Grep
Der grep-Befehl kann zusammen mit Pipes verwendet werden, um eindeutige Ausgaben zu erhalten. Wenn Sie beispielsweise wissen möchten, ob ein bestimmtes Paket auf einem Ubuntu-System installiert ist, führen Sie aus:
dpkg -L | grep "package-name"
Zum Beispiel, um herauszufinden, ob OpenSSH auf Ihrem System installiert ist, leiten Sie den Befehl dpkg -l an grep weiter, wie unten gezeigt:
dpkg -L | grep -i "openssh"
Ausgabe:
Anzeigen der Anzahl der Zeilen vor oder nach einem Suchmuster mit Pipes
Sie können -A oder -B verwenden, um die Anzahl der Zeilen anzuzeigen, die entweder der Suchzeichenfolge vorausgehen oder nach ihr kommen. Das -A-Flag gibt die Zeilen an, die nach der Suchzeichenfolge erscheinen, und -B gibt die Ausgabe aus, die vor der Suchzeichenfolge erscheint. Zum Beispiel:
ifconfig | grep -A 4 ens3
Dieser Befehl zeigt die Zeile, die die Zeichenfolge enthält, plus 4 Zeilen Text nach der Zeichenfolge „ens“ im Befehl ifconfig an.
AUsgabe:
Umgekehrt zeigt in dem unten stehenden Beispiel die Verwendung des -B-Flags die Zeile, die die Suchzeichenfolge enthält, plus 3 Zeilen Text vor der Zeichenfolge „ether“ im Befehl ifconfig an. Ausgabe:
ifconfig | grep -B 4 ether
Verwendung von grep mit REGEX – Regulären Ausdrücken
Der Begriff REGEX ist ein Akronym für REGuläre AUSdrücke. Ein REGEX ist eine Abfolge von Zeichen, die verwendet wird, um ein Muster zu finden. 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
Um Zeilen auszugeben, die mit einem bestimmten Zeichen beginnen, lautet die Syntax:
grep ^character file_name
Zum Beispiel, um die Zeilen anzuzeigen, die mit dem Buchstaben „d“ in unserer Datei
welcome.txt
beginnen, würden wir folgenden Befehl ausführen:
grep ^d welcome.txt
Ausgabe:
Um Zeilen anzuzeigen, die mit dem Buchstaben „x“ enden, führen Sie folgendes 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 weitere Flags oder Optionen zu erhalten, die Sie zusammen mit dem Befehl verwenden können:
grep --help
Beispielausgabe: