Der Befehl Grep

notizbuch-schwarz-1

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:

  • egrep ("extended grep")
  • fgrep ("fixed grep") oder ("faster grep")
  • rgrep ("recursive grep")

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!

Joel Benseler

Click Here to Leave a Comment Below

Leave a Comment: