(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 - extended) grep behandelt jedes Muster als erweiterten regulären Ausdruck. Die Option -E ist äquivalent zum Kommando egrep.
(F - fast grep) grep sucht nach Zeichenketten. Die Option -F ist äquivalent zum Kommando fgrep.
(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 - 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 - quiet) grep schreibt nichts auf die Standardausgabe, auch wenn passende Zeilen gefunden werden.
(b - block) Jeder Ausgabezeile wird die Nummer des Blockes vorangestellt, in dem sie enthalten ist.
(h - hidden) Beim Durchsuchen mehrerer Eingabedateien unterlässt grep die Voranstellung der Dateinamen vor jeder Ausgabezeile.
(i - ignore) grep unterscheidet beim Vergleich nicht zwischen Groß- und Kleinbuchstaben.
(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 - 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 - silent) Fehlermeldungen, die sich auf nicht vorhandene Dateien oder auf Dateien, für die Sie kein Leserecht haben, beziehen, werden unterdrückt.
(v - vice versa) grep gibt alle Zeilen aus, die nicht zu dem angegebenen Muster passen. Zusammen mit Option -c: Zusammen mit Option -l:
(x - exact) fgrep gibt nur solche Zeilen aus, die eine der angegebenen Zeichenketten und sonst keine weiteren Zeichen enthalten.
(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 - file) egrep liest die Musterliste aus der Datei musterdatei. Jede Zeile von musterdatei wird als ein erweiterter regulärer Ausdruck interpretiert.
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’.
Name der Datei, die grep durchsuchen soll. Pro Aufruf können Sie mehrere Dateinamen angeben. datei nicht angegeben: 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
0 | Zeilen gefunden |
1 | keine Zeile gefunden |
>1 | Syntaxfehler 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 1Zeilen ausgeben, die eine bestimmte Zeichenkette enthalten (keine Option und Option -i):
Wenn Sie auch Zeilen mit kleingeschriebenem wanninger ausgeben lassen möchten, geben Sie ein:
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:
Beispiel 2Zeilen ausgeben, die nicht zu dem angegebenen Muster passen (Option -v):
Beispiel 3Anzahl der gefundenen Zeilen ausgeben (Option -c): Zuerst soll für jede Eingabedatei die Anzahl der Zeilen, die mit einer 1 beginnen, ausgegeben werden.
Nun soll die Anzahl der Zeilen, die nicht mit einer 1 beginnen, ausgegeben werden.
Beispiel 4Nur Dateinamen ausgeben (Option -l): Zuerst sollen die Namen der Dateien, die Zeilen mit einer 1 am Anfang enthalten, ausgegeben werden.
Nun sollen die Namen der Dateien, die Zeilen ohne eine 1 am Anfang enthalten, ausgegeben werden.
Beispiel 5Gefundene Zeilen mit Zeilennummer ausgeben (Option -n):
|
Siehe auch
ed, egrep, fgrep, sed stdio [4] |