Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

grep - Muster suchen

&pagelevel(4)&pagelevel

(search a file for a pattern)


grep liest Zeilen aus einer oder mehreren Textdateien oder von der Standard-Eingabe und vergleicht die Zeilen mit einem angegebenen Muster. Ist mittels Optionen nichts anderes angegeben, so schreibt grep alle Zeilen, die zu dem Muster passen, auf die Standard-Ausgabe.

Als Muster können Sie einfache reguläre Ausdrücke angeben (siehe Tabellen und Verzeichnisse,  Reguläre Ausdrücke).

Geben Sie mehrere Eingabedateien an, dann wird jeder Ausgabezeile der Name der betreffenden Datei vorangestellt.


Syntax


Format 1: grep[ -E| -F][ -c| -l| -q][ -bihnrsvxy]
     -e musterliste[ -f musterdatei][ datei...]
Format 2: grep[ -E| -F][ -c| -l| -q][ -bihnrsvxy]
     [ -e musterliste] -f musterdatei [ datei...]
Format 3: grep[ -E| -F][ -c| -l| -q][ -bihnrsvxy]
     musterliste[ datei...]

Die Formate werden gemeinsam beschrieben, da die Muster, nach denen grep die Eingabezeilen vergleichen soll, entweder über musterliste oder über die Option -e musterliste oder -f musterdatei angegeben werden.


Keine Option angegeben

grep gibt alle Zeilen aus, die zu muster passen. Geben Sie mehrere Eingabedateien an, dann wird jeder Ausgabezeile der Name der Datei vorangestellt, aus der die Zeile gelesen wurde.

-E

(E - extended)

grep behandelt jedes Muster als erweiterten regulären Ausdruck.

Die Option -E ist äquivalent zum Kommando egrep.

-F

(F - fast grep)

grep sucht nach Zeichenketten. 

Die Option -F ist äquivalent zum Kommando fgrep.

-c

(c - count)

grep gibt nur die Anzahl der gefundenen Zeilen aus (das sind die Zeilen, die grep ohne die Option -c ausgeben würde, siehe Beispiel 3); die Zeilen selbst werden nicht ausgegeben.

-l

(l - list)

grep gibt nur die Namen der Dateien aus, die mindestens eine der gefundenen Zeilen enthalten. (das sind die Zeilen, die grep ohne die Option -l ausgeben würde, siehe Beispiel 4). Jeder Dateiname wird nur einmal ausgegeben. Die Zeilen selbst gibt grep nicht aus.

-q

(q - quiet) grep schreibt nichts auf die Standardausgabe, auch wenn passende Zeilen gefunden werden.

-b

(b - block)

Jeder Ausgabezeile wird die Nummer des Blockes vorangestellt, in dem sie enthalten ist.
Die Blöcke, aus denen eine Datei besteht, sind je 512 Byte groß und werden, mit 0 beginnend, durchnummeriert.
Option -b kann hilfreich sein, wenn die Nummern von Blöcken nach dem Kontext ermittelt werden sollen (siehe z.B. das Kommando od, Argument offset).

-h

(h - hidden)

Beim Durchsuchen mehrerer Eingabedateien unterlässt grep die Voranstellung der Dateinamen vor jeder Ausgabezeile.

-i oder -y

(i - ignore)

grep unterscheidet beim Vergleich nicht zwischen Groß- und Kleinbuchstaben.

-n

(n - number lines)

Jeder Ausgabezeile wird die Zeilennummer aus der betreffenden Eingabedatei vorangestellt, wobei von 1 an nummeriert wird. Liest grep von der Standard-Eingabe, bezieht sich die Zeilennummer auf die Standard-Eingabe.

-r

(r - recursive)

Jeder Dateiname, der ein Verzeichnisname ist, wird rekursiv durchsucht. Das bedeutet, das alle Dateien und Dateiverzeichnisse, die in diesem Dateiverzeichnis enthalten sind, berücksichtigt werden.

-s

(s - silent)

Fehlermeldungen, die sich auf nicht vorhandene Dateien oder auf Dateien, für die Sie kein Leserecht haben, beziehen, werden unterdrückt.

-v

(v - vice versa)

grep gibt alle Zeilen aus, die nicht zu dem angegebenen Muster passen.

Zusammen mit Option -c:
grep gibt nur die Anzahl solcher Zeilen aus.

Zusammen mit Option -l:
grep gibt nur die Namen der Dateien aus, die solche Zeilen enthalten.

-x

(x - exact)

fgrep gibt nur solche Zeilen aus, die eine der angegebenen Zeichenketten und sonst keine weiteren Zeichen enthalten.

-e musterliste

(e - expression)

Diese Option brauchen Sie, wenn der erste Ausdruck in musterliste mit einem Bindestrich - beginnt. Zusammen mit -e wird eine solche Musterliste nicht als Option interpretiert, sondern als Liste von Mustern, mit denen egrep die Eingabezeilen vergleichen soll.

-f musterdatei

(f - file)

egrep liest die Musterliste aus der Datei musterdatei. Jede Zeile von musterdatei wird als ein erweiterter regulärer Ausdruck interpretiert.

musterliste

Einfacher regulärer Ausdruck, mit dem grep die Eingabezeilen vergleichen soll (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke).

Enthält musterliste Zeichen, die für die Shell eine Sonderbedeutung haben, dann schließen Sie musterliste in Hochkommas ein: ’musterliste’.

datei

Name der Datei, die grep durchsuchen soll. Pro Aufruf können Sie mehrere Dateinamen angeben.

datei nicht angegeben:
grep liest die Eingabezeilen von der Standard-Eingabe.


grep kann nur auf Textdateien angewendet werden. Wird grep auf Binärdateien (z.B. Historydatei) angewendet, ist das Ergebnis undefiniert, da das Auftreten eines Nullbytes eine Eingabezeile logisch beendet.

grep, fgrep und egrep

Die Kommandos grep, fgrep und egrep sind von der Oberfläche her weitgehend identisch. Im Folgenden sind die wichtigsten Unterschiede zwischen diesen Kommandos aufgeführt.

grep verarbeitet einfache reguläre Ausdrücke.

fgrep verarbeitet nur Zeichenketten. Pro Aufruf können Sie jedoch mehrere Zeichenketten angeben: Die Zeichenketten geben Sie entweder direkt in der Aufrufzeile, getrennt durch Neue-Zeile-Zeichen, an oder Sie übergeben sie in einer Datei. fgrep kann effizient sehr viele Zeichenketten suchen: fgrep sucht jede einzelne Zeile nach allen Zeichenketten ab.

egrep verarbeitet erweiterte reguläre Ausdrücke. Diese umfassen u.a. die einfachen regulären Ausdrücke bis auf eine Ausnahme: Der einfache reguläre Ausdruck \(regausdruck\) hat bei erweiterten regulären Ausdrücken keine Sonderbedeutung und wird deshalb auch nicht von egrep verarbeitet. Pro Aufruf können Sie mehrere reguläre Ausdrücke, durch Neue-Zeile-Zeichen getrennt, angeben. egrep interpretiert diese Neue-Zeile-Zeichen wie einen senkrechten Strich (Zeichen für die Alternative, siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). Die regulären Ausdrücke geben Sie entweder direkt in der Aufrufzeile an oder Sie übergeben sie in einer Datei.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos grep:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_COLLATE

Beeinflusst die Sortierreihenfolge.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Endestatus

0Zeilen gefunden
1keine Zeile gefunden
>1Syntaxfehler oder Datei kann nicht geöffnet werden.
Dieser Endestatus gilt auch dann, wenn in anderen Eingabedateien Zeilen gefunden wurden.

Beispiel

Grundlage für die nachfolgenden Beispiele sind die Dateien kunden1 und kunden2. Sie haben folgenden Inhalt:

kunden1:

080693    999.98  20 LE  Art.  038   Fa. Holzinger
120394   1240.25   3 LE  Art.  023   Fa. Wanninger
180595    330.87   1 LE  Art.  332   Fa. Wanninger

kunden2:

hinterhuber berta, rosenheim, zugspitzstr.1
wanninger herbert, muenchen, kirschstr.3
Beispiel 1

Zeilen ausgeben, die eine bestimmte Zeichenkette enthalten (keine Option und Option -i):

$ grep Wanninger kunden1 kunden2

kunden1:120394   1240.25   3 LE  Art.  023   Fa. Wanninger

kunden1:180595    330.87   1 LE  Art.  332   Fa. Wanninger

Wenn Sie auch Zeilen mit kleingeschriebenem wanninger ausgeben lassen möchten, geben Sie ein:

$ grep -i wanninger kunden1 kunden2

kunden1:120394   1240.25   3 LE  Art.  023   Fa. Wanninger

kunden1:180595    330.87   1 LE  Art.  332   Fa. Wanninger
kunden2:wanninger herbert, muenchen, kirschstr.3

Kompliziertere Muster stellen Sie mit Hilfe von regulären Ausdrücken dar, z.B.:

Einträge des Jahres 1994 in der Datei kunden1 ausgeben - das sind alle Zeilen, die in der 5. und 6. Spalte die Zahl 94 enthalten:

$ grep '^....94' kunden1

120394 1240.25 3 LE Art. 023 Fa. Wanninger

Beispiel 2

Zeilen ausgeben, die nicht zu dem angegebenen Muster passen (Option -v):

$ grep -v '^1' kunden1 kunden2
kunden1:080693    999.98  20 LE  Art.  038   Fa. Holzinger

kunden2:hinterhuber berta, rosenheim, zugspitzstr.1

kunden2:wanninger herbert, muenchen, kirschstr.3

Beispiel 3

Anzahl der gefundenen Zeilen ausgeben (Option -c):

Zuerst soll für jede Eingabedatei die Anzahl der Zeilen, die mit einer 1 beginnen, ausgegeben werden.

$ grep -c '^1' kunden1 kunden2

kunden1:2

kunden2:0

Nun soll die Anzahl der Zeilen, die nicht mit einer 1 beginnen, ausgegeben werden.

$ grep -c -v '^1' kunden1 kunden2

kunden1:1

kunden2:2

Beispiel 4

Nur Dateinamen ausgeben (Option -l):

Zuerst sollen die Namen der Dateien, die Zeilen mit einer 1 am Anfang enthalten, ausgegeben werden.

grep -l '^1' kunden1 kunden2

kunden1

Nun sollen die Namen der Dateien, die Zeilen ohne eine 1 am Anfang enthalten, ausgegeben werden.

$ grep -l -v '^1' kunden1 kunden2
kunden1

kunden2

Beispiel 5

Gefundene Zeilen mit Zeilennummer ausgeben (Option -n):

$ grep -n -i wanninger kunden1 kunden2
kunden1:2:120394   1240.25   3 LE  Art.  023   Fa. Wanninger

kunden1:3:180595    330.87   1 LE  Art.  332   Fa. Wanninger

kunden2:2:wanninger herbert, muenchen, kirschstr.3

Siehe auch  

ed, egrep, fgrep, sed

stdio [4]