Provided by:
manpages-de_0.5-4.1ubuntu1_all 
BEZEICHNUNG
grep, egrep, fgrep - finde Suchmuster in Dateien
ÜBERSICHT
grep [Optionen] MUSTER [DATEI...]
grep [Optionen] [-e MUSTER | -f DATEI] [DATEI...]
BESCHREIBUNG
Grep sucht in den angegebenen DATEIen nach Zeilen, die auf das MUSTER
passen. Sind keine Dateien oder der spezielle Dateiname - angegeben,
so liest grep statt dessen von der Standardeingabe. Sofern nicht
anders spezifiziert, gibt es genau die Zeilen aus, die auf MUSTER
passen.
Es existieren noch die beiden Programmvarianten egrep und fgrep. Sie
verhalten sich identisch zum normalen grep, das mit der Option -E
beziehungsweise -F aufgerufen wurde.
OPTIONEN
-A NUM, --after-context=NUM
Zeige NUM Zeilen Kontext im Anschluss an eine auf das Muster
passende Zeile an.
-a, --text
Verarbeite eine Binärdatei als wäre sie gewöhnlicher Text;
dieser Schalter bedeutet dasselbe wie die Option --binary-
files=text.
-B NUM, --before-context=NUM
Zeige NUM Zeilen Kontext vor einer auf das Muster passenden
Zeile an.
-C [NUM], -NUM, --context[=NUM]
Zeige je NUM Zeilen Kontext vor und nach einer auf das Muster
passenden Zeile an. Zwei Zeilen Kontext sind voreingestellt.
-b, --byte-offset
Zeige vor jeder Ausgabezeile den Abstand in Bytes innerhalb der
Eingabedatei an.
--binary-files=TYP
Falls die ersten Bytes einer Datei anzeigen, dass sie Binärdaten
enthält, soll angenommen werden, dass es sich um eine Datei vom
Typ TYP handelt. Mögliche Typen sind binary, text und without-
match. In der Einstellung binary zeigt grep auf das Muster
passende Zeilen nicht direkt an, sondern gibt lediglich eine
Meldung aus, dass in der Datei Treffer gefunden wurden. Dieses
Verhalten ist voreingestellt. In der Einstellung without-match
überspringt grep Binärdateien, ohne dort nach Treffern zu
suchen. Der Schalter -I bewirkt dasselbe. Vorsicht ist mit der
Einstellung text geboten, da grep hier die passenden Zeilen
direkt anzeigt. Das kann Probleme bereiten, wenn die Ausgabe
auf eine Konsole geleitet wird und deren Treiber manche der
Binärdaten als Steuerzeichen interpretiert. Dieser Modus kann
auch über den Schalter -a eingestellt werden.
-c, --count
Statt die passenden Zeilen direkt anzuzeigen, wird lediglich
ihre Anzahl pro Eingabedatei ausgegeben. Ist zusätzlich die
Option -v, --invert-match (siehe unten) angegeben, zählt grep
die Zeilen ohne Treffer zusammen.
-d AKTION, --directories=AKTION
Handelt es sich bei einer der Eingabedateien um ein Verzeichnis,
so soll die Aktion AKTION ausgeführt werden, um es zu
verarbeiten. In der Standardeinstellung read liest grep das
Verzeichnis ein, als wäre es eine gewöhnliche Datei. Ist AKTION
auf skip gesetzt, so werden Verzeichnis stillschweigend
übersprungen. Steht AKTION auf recurse oder wurde der Schalter
-r benutzt, so sucht grep rekursiv durch sämtliche Dateien
unterhalb jedes Verzeichnisses.
-E, --extended-regexp
MUSTER soll als erweiterter regulärer Ausdruck (siehe unten)
interpretiert werden.
-e MUSTER, --regexp=MUSTER
Verwende MUSTER als das Suchmuster. Dadurch lässt sich
verhindern, dass grep Suchmuster, die mit - beginnen, als
Optionen interpretiert.
-F, --fixed-strings
Interpretiere MUSTER als Liste feststehender Zeichenketten, die
durch Zeilenumbruch getrennt sind. Für einen Treffer muss
mindestens eine der Zeichenketten passen.
-f DATEI, --file=DATEI
Lies die Suchmuster Zeile für Zeile aus DATEI ein. Eine leere
Datei enthält keinerlei Suchmuster und erzielt deshalb auch
keine Treffer.
-G, --basic-regexp
Interpretiere MUSTER als gewöhnlichen regulären Ausdruck (siehe
unten). Dies entspricht der Voreinstellung.
-H, --with-filename
Gibt vor jedem Treffer den zugehörigen Dateinamen aus.
-h, --no-filename
Der Dateiname wird auch dann nicht vor einem Treffer ausgegeben,
wenn mehrere Dateien durchsucht werden.
--help Zeigt eine kurze Hilfe zum Programm an.
-I Behandelt Binärdateien so, als würde ihr Inhalt nie auf das
Suchmuster passen. Dies ist gleichbedeutend mit der Option
--binary-files=without-match.
-i, --ignore-case
Unterscheidet auf der Suche nach Treffern nicht zwischen Groß-
und Kleinschreibung.
-L, --files-without-match
Statt der normalen Ausgabe wird der Name jeder Datei ohne
Treffer angezeigt. Die Suche endet in jeder Datei beim ersten
Treffer.
-l, --files-with-matches
Statt der normalen Ausgabe wird der Name jeder Datei mit
mindestens einem Treffer angezeigt. Die Suche endet in jeder
Datei beim ersten Treffer.
--mmap Verwendet falls möglich den Systemaufruf mmap(2) statt des
üblichen read(2), um die Eingabedaten einzulesen. Unter
gewissen Umständen erzielt --mmap bessere Leistungswerte, ist
jedoch unzuverlässiger und kann sogar zu Programmabstürzen
führen, wenn beispielsweise eine Eingabedatei während der Suche
verkleinert wird oder ein Ein-/Ausgabefehler auftritt.
-n, --line-number
Gibt vor jeder Zeile die Zeilennummer innerhalb der aktuellen
Eingabedatei aus.
-o, --only-matching
Gibt nur die übereinstimmenden, nicht leeren, Teile der auf das
Muster passenden Zeilen an, jeden Teil auf einer eigenen Zeile.
-q, --quiet, --silent
Unterdrückt die normalen Ausgaben. Die Suche endet nach dem
ersten Treffer. Diese Option ist sinnvoll, wenn lediglich der
Rückgabewert von grep weiter verwendet wird. Siehe auch die
Optionen -s und --no-messages weiter unten.
-r, --recursive
Durchsuche rekursiv sämtliche Dateien unterhalb eines
Verzeichnisses. Die Option -d recurse hat dieselbe Bedeutung.
-s, --no-messages
Unterdrücke Fehlermeldungen über nicht vorhandene oder unlesbare
Dateien. Anmerkung zur Portierbarkeit: Im Gegensatz zu GNU
grep verhielt sich das ursprüngliche grep nicht konform zum
POSIX.2-Standard, da es keine Option -q kannte und die Option -s
sich so verhielt wie -q im heutigen GNU grep. Portable Shell-
Skripte, die auch mit dem ursprünglichen grep funktionieren
müssen, sollten deshalb weder -q noch -s verwenden und statt
dessen die Ausgabe nach /dev/null umleiten.
-U, --binary
Verarbeite die Eingaben als Binärdateien. Unter MS-DOS und MS-
Windows versucht grep, den Dateityp zu bestimmen, indem es die
ersten 32kByte der Datei untersucht. In einer Textdatei
entfernt es daraufhin intern alle CR-Wagenrücklaufzeichen, damit
^ und $ in regulären Ausdrücken korrekt funktionieren. Die
Angabe von -U umgeht die ganze Raterei und weist grep an, jede
Datei exakt so zu verarbeiten, wie sie eingelesen worden ist.
Falls es sich um eine Textdatei handelt, deren Zeilen mit einem
kombinierten Wagenrücklauf und Zeilenumbruch (CR/LF) enden,
arbeiten manche reguläre Ausdrücken fehlerhaft. Diese Option
hat keine Auswirkungen auf anderen Plattformen als MS-DOS und
MS-Windows.
-u, --unix-byte-offsets
Zeigt Byte-Abstände im Unix-Stil an. Mit Hilfe dieses Schalters
gibt grep Byte-Abstände in Textdateien stets so aus, als würden
sie nur ein einzelnes Zeilenumbruchsymbol am Zeilenende
enthalten. Mit anderen Worten: Ein eventuelles
Wagenrücklaufsymbol am Zeilenende wird nicht berücksichtigt. So
erzeugt grep, angewandt auf eine Textdatei im DOS-Format
identische Resultate wie für die gleiche Textdatei im Unix-
Format. Diese Option ist nur in Verbindung mit dem Schalter -b
wirksam. Sie hat keine Auswirkungen auf anderen Plattformen als
MS-DOS und MS-Windows.
-V, --version
Zeigt die Versionsnummer von grep auf dem Standard-
Fehlerausgabekanal an. Die Versionsnummer sollte in allen
Fehlerberichten (siehe unten) mit angegeben werden.
-v, --invert-match
Invertiert das Suchmuster, so dass alle Zeilen ausgewählt
werden, die nicht auf MUSTER passen.
-w, --word-regexp
Wählt nur solche Zeilen aus, deren Treffer aus kompletten
Wörtern bestehen. Im einzelnen verläuft der Test so, dass eine
passende Zeichenkette entweder am Zeilenanfang beginnen muss
oder auf ein Zeichen folgt, das nicht zu den Wortaufbau-Zeichen
gehört. Ebenso muss das Ende der Zeichenkette entweder mit dem
Zeilenende zusammenfallen, oder es wird nicht gefolgt von einem
der Wortaufbau-Zeichen. Wortaufbau-Zeichen sind alle
Buchstaben, Ziffern sowie der Unterstrich.
-x, --line-regexp
Wählt nur solche Zeilen aus, deren Treffer die komplette Zeile
umfasst.
-y Ein veraltetes Synonym für -i.
-Z, --null
Gibt statt des üblichen Trennzeichens nach jedem Dateinamen ein
Nullbyte (das ASCII-Zeichen NUL) aus. So stellt beispielsweise
grep -lZ nach jedem Dateinamen statt des Zeilenumbruchs ein
Nullbyte dar. Diese Option sorgt dafür, dass die Ausgabe selbst
in Gegenwart ungewöhnlicher Dateinamen eindeutig bleibt, die zum
Beispiel einen Zeilenumbruch enthalten. Sie kann zusammen mit
Kommandos wie find -print0, perl -0, sort -z und xargs -0 dazu
verwendet werden, beliebige Dateinamen zu verarbeiten.
REGULÄRE AUSDRÜCKE
Unter einem regulären Ausdruck versteht man ein Muster, das eine
bestimmte Menge von Zeichenketten beschreibt. Reguläre Ausdrücke
werden ganz ähnlich aufgebaut wie arithmetische Ausdrücke, indem man
sie mit Hilfe verschiedener Operatoren aus kleineren Ausdrücken
zusammensetzt.
Grep versteht zwei verschiedene Klassen regulärer Ausdrücke:
“gewöhnliche” und “erweiterte”. Eine Unterscheidung, die für GNU grep
keine Rolle spielt, da beide Varianten gleich mächtig sind. In anderen
grep-Implementierungen steht mit gewöhnlichen regulären Ausdrücken
jedoch nur ein eingeschränkter Funktionsumfang zur Verfügung. Die
folgende Beschreibung bezieht sich auf erweiterte reguläre Ausdrücke;
die Unterschiede zu gewöhnlichen regulären Ausdrücken sind im Anschluss
daran zusammengefasst.
Grundlegendster Baustein sind die regulären Ausdrücke, die auf ein
einzelnes Zeichen passen. Die meisten Zeichen, speziell alle
Buchstaben und Ziffern, sind zugleich reguläre Ausdrücke, die auf sich
selbst passen. Alle Metazeichen, die eine besondere Bedeutung
besitzen, können durch einen vorausgehenden Rückstrich geschützt
werden.
Eine Liste von Zeichen, die durch [ und ] eingeschlossen ist, passt auf
ein beliebiges Zeichen daraus. Beginnt die Liste mit dem Symbol ^, so
kehrt sich die Bedeutung um; sie passt auf alle Zeichen, die nicht in
der Liste enthalten sind. Beispielsweise passt der reguläre Ausdruck
[0123456789] auf eine beliebige einzelne Ziffer. Ein ganzer Bereich
von Zeichen kann angegeben werden durch das erste und letzte Zeichen
daraus, verbunden durch einen Bindestrich. Schließlich gibt es noch
eine Reihe vordefinierter Klassen von Zeichen, im einzelnen: [:alnum:]
(Buchstaben und Ziffern), [:alpha:] (Buchstaben), [:cntrl:]
(Steuerzeichen), [:digit:] (Ziffern), [:graph:] (graphische Zeichen,
das heißt [:alnum:] und [:punct:]), [:lower:] (Kleinbuchstaben),
[:print:] (druckbare Zeichen), [:punct:] (Satzzeichen), [:space:]
(Leerraum), [:upper:] (Großbuchstaben) und [:xdigit:] (Ziffern des
Hexadezimalsystems). So bedeutet beispielsweise [[:alnum:]] für
gewöhnlich dasselbe wie [0-9A-Za-z], jedoch hängt die zweite Form ab
von der POSIX-Ländereinstellung und ASCII-Kodierung der Zeichen,
während die erste Form davon unabhängig ist. (Man beachte, dass die
eckigen Klammern Teil des symbolischen Namens der einzelnen Klassen
sind. Zusätzlich dazu müssen noch die eckigen Klammern angegeben
werden, die eine Liste von Zeichen begrenzen.) Die meisten Metazeichen
verlieren innerhalb einer Zeichenkette ihre besondere Bedeutung. Um
ein ] selbst zu beschreiben, muss es an erster Stelle der Kette gesetzt
werden. Soll ^ als gewöhnliches Zeichen auftreten, darf es nicht an
erster Stelle stehen. Das Zeichen - selbst muss an letzter Stelle der
Kette auftauchen.
Der Punkt . passt auf jedes beliebige, einzelne Zeichen. Das Symbol
\w ist ein Synonym für [[:alnum:]], \W ein Synonym für [^[:alnum]].
Das Dach ^ und das Dollarzeichen $ sind Sonderzeichen, die auf die
leere Zeichenkette am Anfang beziehungsweise Ende einer Zeile passen.
Ganz ähnlich passen die Symbole \< und \> auf die leere Zeichenkette am
Anfang beziehungsweise Ende eines Wortes. Das Symbol \b passt auf die
leere Zeichenkette an einem Wortrand; \B bezeichnet das Gegenteil davon
und passt auf die leere Zeichenkette, falls die sich nicht an einem
Wortrand befindet.
Ein regulärer Ausdruck kann gefolgt werden von einem oder mehreren
Wiederholungsoperatoren:
? Das vorhergehende Objekt ist optional und tritt höchstens einmal
auf.
* Das vorhergehende Objekt tritt kein Mal oder beliebig oft auf.
+ Das vorhergehende Objekt tritt ein- oder mehrmals auf.
{n} Das vorhergehende Objekt tritt genau n-mal auf.
{n,} Das vorhergehende Objekt tritt mindestens n-mal oder öfter auf.
{n,m} Das vorhergehende Objekt tritt mindestens n- und höchstens m-mal
auf.
Zwei reguläre Ausdrücke können aneinander gefügt werden. Der
entstehende reguläre Ausdruck passt auf jede Zeichenkette, die aus zwei
aneinander gesetzten Teilketten besteht, sofern jede der Teilketten auf
den zugehörigen regulären Teilausdruck passt.
Sind zwei reguläre Ausdrück durch den Infix-Operator | verbunden, so
passt der gesamte reguläre Ausdruck auf jede Zeichenkette, die auf
mindestens einen der beiden Teilausdrücke passt.
Wiederholungsoperatoren besitzen höhere Priorität als eine
Aneinanderreihung. Am niedrigsten ist die Priorität der Alternative.
Einzelne Teilausdrücke können in Klammern gesetzt werden, um diese
Regeln explizit abzuändern.
Die Rückwärtsreferenz \n - wobei n für eine einzelne Ziffer steht -,
passt auf die Zeichenkette, die wiederum auf den vorhergehenden,
eingeklammerten Teilausdruck Nummer n des regulären Ausdrucks gepasst
hat.
In gewöhnlichen regulären Ausdrücken besitzen die Metazeichen ?, +, {,
}, |, ( und ) keine besondere Bedeutung. Statt dessen können die mit
einem Rückstrich geschützten Versionen \?, \+, \{, \}, \|, \( und \)
verwendet werden.
Das Metazeichen { wurde im ursprünglichen egrep nicht unterstützt.
Andere Implementierungen unterstützen statt dessen \{, so dass portable
Skripte { in egrep-Mustern generell vermeiden sollten. Als Alternative
kann [{] verwendet werden, um das Zeichen { selbst zu beschreiben.
GNU egrep versucht, das ursprüngliche Verhalten zu unterstützen indem
es annimmt, dass { keine besondere Bedeutung besitzt, falls es eine
ungültige Intervallbeschreibung einleiten würde. So sucht
beispielsweise das Kommando egrep ’{1’ nach der zwei Zeichen langen
Zeichenkette {1, statt einen fehlerhaften regulären Ausdruck zu melden.
Dieses Verhalten ist in POSIX.2 als Erweiterung erlaubt. Portable
Skripte sollten darauf jedoch nicht vertrauen.
UMGEBUNGSVARIABLEN
GREP_OPTIONS
Mit Hilfe dieser Variable lassen sich Standardoptionen
definieren, die vor alle explizit angegebenen Optionen gesetzt
werden. Enthält GREP_OPTIONS beispielsweise ’--binary-
files=without-match --directories=skip’, so verhält sich grep,
als ob die beiden Optionen --binary-files=without-match und
--directories=skip auf der Kommandozeile vor allen weiteren
Optionen angegeben worden wären. Mehrere Optionen werden durch
Leerzeichen getrennt. Ein Rückstrich schützt das folgende
Zeichen, so dass auch Optionen angegeben werden können, die
selbst Leerzeichen oder Rückstriche enthalten.
LC_ALL, LC_MESSAGES, LANG
Diese Variablen wählen die LC_MESSAGES-Ländereinstellung aus,
die festlegt, in welcher Sprache grep seine Meldungen ausgibt.
Die Ländereinstellung wird in der angegebenen Reihenfolge durch
die erste gesetzte Variable bestimmt. Falls keine der
Umgebungsvariablen gesetzt, der Katalog von Meldungen in der
gewünschten Sprache nicht verfügbar oder grep ohne
Mehrsprachenunterstützung (NLS) übersetzt worden ist, wird
amerikanisches Englisch verwendet.
LC_ALL, LC_CTYPE, LANG
Diese Variablen legen die LC_CTYPE-Ländereinstellung fest. Sie
bestimmt den Typ eines jeden Zeichens, beispielsweise welche
Zeichen als Leerraum angesehen werden, welche als Sonderzeichen
und welche als Buchstaben. Die Ländereinstellung wird in der
angegebenen Reihenfolge durch die erste gesetzte Variable
bestimmt. Falls keine der Umgebungsvariablen gesetzt oder grep
ohne Mehrsprachenunterstützung (NLS) übersetzt worden ist, wird
die POSIX-Einstellung verwendet.
POSIXLY_CORRECT
Falls gesetzt, verhält sich grep strikt nach dem
POSIX.2-Standard, andernfalls ähnelt sein Verhalten eher dem
anderer GNU-Programme. POSIX.2 verlangt, dass Optionen, die
nach einem Dateinamen angegeben sind, als Dateinamen behandelt
werden. Normalerweise behandelt grep sie immer als Optionen,
gleichgültig an welcher Stelle sie auftreten. Ferner verlangt
POSIX.2, unbekannte Optionen als “unzulässig” anzuzeigen. In
den Standardeinstellungen meldet grep sie lediglich als
“ungültig”. POSIXLY_CORRECT deaktiviert auch
_N_GNU_nonoption_argv_flags_, das unten genauer beschrieben ist.
_N_GNU_nonoption_argv_flags_
(N ist hier die numerische Kennung des grep-Prozesses.) Falls
das i-te Zeichen dieser Umgebungsvariable den Wert 1 besitzt,
wird das i-te Argument von grep nicht als Option verarbeitet,
selbst wenn es wie eine Option aussieht. Ein
Kommandozeileninterpreter kann diese Umgebungsvariable setzen um
anzuzeigen, welche der Argumente erzeugt worden sind durch
Mustererkennung von Dateinamen und deshalb keinesfalls als
Optionen berücksichtigt werden sollen. Diese Verhalten steht
nur in Verbindung mit der GNU C-Bibliothek zur Verfügung und nur
dann, wenn POSIXLY_CORRECT nicht gesetzt ist.
DIAGNOSE
Normalerweise zeigt ein Rückgabewert von 0 an, dass Treffer gefunden
worden sind, und 1, dass es keine Treffer gab. (Die Option -v kehrt
die Bedeutung der Rückgabewerte um.) Ein Rückgabewert von 2 zeigt ein
fehlerhaftes Suchmuster an, unzugängliche Eingabedateien oder andere
Systemfehler.
FEHLER
Berichte über Fehler in grep sollten per E-Mail an bug-gnu-
utils@gnu.org geschickt werden. Die Betreff-Zeile sollte das Wort
“grep” enthalten.
Wiederholungsangaben im Konstrukt {m,n} können dazu führen, dass grep
große Mengen Speicherplatz verbraucht. Darüber hinaus gibt es noch
weitere ungewöhnliche reguläre Ausdrücke, deren Verarbeitung
exponentiell viel Zeit und Speicher benötigt und dazu führen kann, dass
grep den Speicherplatz erschöpft.
Rückwärtsreferenzen sind sehr langsam und können exponentiell viel Zeit
in Anspruch nehmen.
26. Oktober 2002 GREP(1)