Der Befehl Grep
Mit dem grep Befehl ("Global Search for a Regular Expression and Print out matched lines") können Dateien nach verschiedenen Mustern durchsucht werden. Für die Suche nach Übereinstimmungen kommen sogenannte Reguläre Ausdrücke zum Einsatz.
In diesem Beitrag lernen Sie die grundlegende Funktionsweise des grep Befehls, sowie einige mit dem Befehl verwendbare reguläre Ausdrücke kennen, um sie in der Praxis erfolgreich umsetzen zu können.
Die 4 verschiedenen grep Befehle
Neben dem normalen grep gibt es mittlerweile noch einige weitere Befehle mit ähnlicher Funktionsweise. Dazu gehören die folgenden drei:
Die 3 Abwandlungen unterscheiden sich von dem herkömmlichen grep in der Verfügbarkeit weiterer Ausdrücke (egrep), der Such-Geschwindigkeit (fgrep) und der Möglichkeit für rekursive Suchen in Unterverzeichnissen (rgrep).
In diesem Beitrag wird jedoch zunächst nur der klassische grep Befehl behandelt.
Die Suche mit grep
Bei der Suche mit grep wird die folgende Syntax verwendet:
grep [Optionen] [Muster] [Dateipfad]
Beispiel: Suche nach einem Wort
Bei diesem Beispiel soll die Datei "gruppen.txt" nach dem Wort 'it' durchsucht werden. grep gibt alle Zeilen zurück, in denen das Wort aufzufinden ist.
Inhalt der Textdatei (gruppen.txt):
it-consulting-hannover
immobilienservice-hannover
open-school-it
online-kurse
miete-hannover
Eingabe:
grep 'it' gruppen.txt
Ausgabe:
it-consulting-hannover
open-school-it
Suche in mehreren Dateien
Es können auch mehrere Dateipfade hintereinander angegeben werden, um in allen angegebenen Dateien gleichzeitig nach einem Muster zu suchen. Die Dateipfade werden hintereinander, durch Leerzeichen getrennt, aufgelistet:
grep [Optionen] [Muster] [Dateipfad] [Dateipfad] ...
Beispiel: Suche nach einem Wort in mehreren Dateien
Hier sollen die beiden Dateien /etc/passwd und /etc/group nach dem Benutzer 'admina' durchsucht werden. Dazu werden für grep gleich beide Dateipfade angegeben.
Falls Sie mehr über die /etc/passwd bzw. /etc/group erfahren wollen, sehen Sie sich auch unseren Beitrag dazu an.
Ausschnitt aus /etc/passwd:
hellberg:x:1000:1000:hellberg,,,:/home/hellberg:/bin/bash
admina:x:1001:1001:admina,,,:/home/admina:/bin/bash
bibo:x:1006:1002:,,,:/home/bibo:/bin/bash
berni:x:1003:1003:,,,:/home/berni:/bin/bash
Ausschnitt aus /etc/group:
hellberg:x:1000:
bibo:x:1002:hellberg
admina:x:1001:
berni:x:1003:hellberg
Eingabe:
grep 'admina' /etc/passwd /etc/group
Ausgabe:
/etc/passwd:admina:x:1001:1001:admina,,,:/home/admina:/bin/bash
/etc/group:admina:x:1001:
Wichtige Optionen des grep Befehls
Im Folgenden werden einige der wichtigsten Optionen vorgestellt.
Rekursive Suche in allen Unterverzeichnissen
Mit der Option -R können alle Unterverzeichnisse des aktuellen Verzeichnisses oder eines angegebenen Verzeichnisses durchsucht werden.
grep -R [Muster] [Verzeichnis]
Für jede gefundene Zeile wird der jeweilige Dateipfad angegeben.
Ganze Wörter suchen
Bei der Suche von beispielsweise 'hedv' oder 'hellberg' werden auch Konkatenationen der Worte mit anderen Wörtern ausgegeben (z.B. "hedvberatung"). Um zu gewährleisten, dass nur nach ganzen Worten gesucht wird, wird die Option -w angehängt:
grep -w [Muster] [Dateipfad]
Zeilennummer ausgeben
Für jede gefundene Zeile kann zusätzlich die Zeilennummer angezeigt werden. Dies wird durch Hinzufügen der Option -n erreicht:
grep -n [Muster] [Dateipfad]
Die Zeilennummer wird dann an den Anfang jeder ausgegebenen Zeile angehängt.
Groß- und Kleinschreibung ignorieren
Bei der Suche nach einem Muster kann mit der Option -i die Groß- und Kleinschreibung ignoriert werden (case-insensitive).
grep -i [Muster] [Dateipfad]
Suche invertieren
Mit -v wird die Suche invertiert, sodass nur die nicht passenden Zeilen ausgegeben werden.
grep -v [Muster] [Dateipfad]
Reguläre Ausdrücke für die Suche
Bei der Suche mit grep können neben einfachen Worten auch sogenannte Reguläre Ausdrücke als Such-Muster verwendet werden. Es folgt eine Liste von unterstützten Ausdrücken:
Operator | Funktion |
---|---|
^ | Zeilenanfang |
$ | Zeilenende |
^$ | Komplette Zeile |
. | Beliebiges Zeichen |
* | Beliebige Wiederholung des vorigen Zeichens |
.* | Beliebige Zeichenkette |
[] | Eines der Zeichen aus der Menge |
[^] | Zeichen aus der Menge ignorieren |
\< | Anfang eines Wortes |
\> | Ende eines Wortes |
\(...\) | Back-Referenz |
x\{n\} | Exakt n-malige Wiederholung des Zeichens |
Es folgen nun einige Beispiele für die Anwendung von regulären Ausdrücken bei der Verwendung von grep.
Beispiel: .*
Hierbei wird der Operator .* vor das Wort 'hannover' angehängt, um alle Zeilen auszugeben, die eine beliebige Zeichenkette mit Endung auf 'hannover' enthalten.
Inhalt der Textdatei (gruppen.txt):
edvberatung-hannover
hausverwaltung-isernhagen
verwaltung-hannover
profi-tutorials
Eingabe:
grep '.*hannover' gruppen.txt
Ausgabe:
edvberatung-hannover
verwaltung-hannover
Beispiel: Zeilenanfang und Zeilenende
Hier soll nach Zeilen gesucht werden, die exakt ein Wort enthalten. Dazu werden die beiden Operatoren ^ (Zeilenanfang) und $ (Zeilenende) verwendet.
Es wird lediglich die Zeile zurückgegeben, die genau das angegebene Wort enthält. Alle anderen Zeilen, die das Wort entweder garnicht oder neben dem Wort noch andere Zeichen enthalten, werden ignoriert.
Inhalt der Textdatei (gruppen.txt):
openschoolit
open-schoolit
open-school-it
openschool-it
open-school
Eingabe:
grep '^open-school$'
Ausgabe:
open-school
Das Video zu diesem Beitrag
Abonniere JETZT unseren Newsletter!
Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!