GREP(1) Dienstprogramme fr Benutzer GREP(1)
grep, egrep, fgrep - finde Suchmuster in Dateien
grep [Optionen] MUSTER [DATEI...]
grep [Optionen] [-e MUSTER | -f DATEI] [DATEI...]
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.
-A NUM, --after-context=NUM
Zeige NUM Zeilen Kontext im Anschluss an eine auf das Muster
passende Zeile an.
-a, --text
Verarbeite eine Binrdatei als wre sie gewhnlicher 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 Binrdaten
enthlt, soll angenommen werden, dass es sich um eine Datei vom
Typ TYP handelt. Mgliche 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 Binrdateien, ohne dort nach Treffern zu suchen.
Der Schalter -I bewirkt dasselbe. Vorsicht ist mit der Einstel-
lung 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 Binrdaten 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 zustzlich die
Option -v, --invert-match (siehe unten) angegeben, zhlt 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 ausgefhrt werden, um es zu
verarbeiten. In der Standardeinstellung read liest grep das
Verzeichnis ein, als wre es eine gewhnliche 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 smtliche Dateien unter-
halb jedes Verzeichnisses.
-E, --extended-regexp
MUSTER soll als erweiterter regulrer Ausdruck (siehe unten)
interpretiert werden.
-e MUSTER, --regexp=MUSTER
Verwende MUSTER als das Suchmuster. Dadurch lsst sich verhin-
dern, dass grep Suchmuster, die mit - beginnen, als Optionen
interpretiert.
-F, --fixed-strings
Interpretiere MUSTER als Liste feststehender Zeichenketten, die
durch Zeilenumbruch getrennt sind. Fr einen Treffer muss min-
destens eine der Zeichenketten passen.
-f DATEI, --file=DATEI
Lies die Suchmuster Zeile fr Zeile aus DATEI ein. Eine leere
Datei enthlt keinerlei Suchmuster und erzielt deshalb auch keine
Treffer.
-G, --basic-regexp
Interpretiere MUSTER als gewhnlichen regulren Ausdruck (siehe
unten). Dies entspricht der Voreinstellung.
-H, --with-filename
Gibt vor jedem Treffer den zugehrigen 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 Binrdateien so, als wrde ihr Inhalt nie auf das Such-
muster 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 Tref-
fer angezeigt. Die Suche endet in jeder Datei beim ersten Tref-
fer.
-l, --files-with-matches
Statt der normalen Ausgabe wird der Name jeder Datei mit min-
destens einem Treffer angezeigt. Die Suche endet in jeder Datei
beim ersten Treffer.
--mmap Verwendet falls mglich den Systemaufruf mmap(2) statt des
blichen read(2), um die Eingabedaten einzulesen. Unter gewissen
Umstnden erzielt --mmap bessere Leistungswerte, ist jedoch unzu-
verlssiger und kann sogar zu Programmabstrzen fhren, wenn
beispielsweise eine Eingabedatei whrend der Suche verkleinert
wird oder ein Ein-/Ausgabefehler auftritt.
-n, --line-number
Gibt vor jeder Zeile die Zeilennummer innerhalb der aktuellen
Eingabedatei aus.
-q, --quiet, --silent
Unterdrckt die normalen Ausgaben. Die Suche endet nach dem
ersten Treffer. Diese Option ist sinnvoll, wenn lediglich der
Rckgabewert von grep weiter verwendet wird. Siehe auch die
Optionen -s und --no-messages weiter unten.
-r, --recursive
Durchsuche rekursiv smtliche Dateien unterhalb eines Verzeich-
nisses. Die Option -d recurse hat dieselbe Bedeutung.
-s, --no-messages
Unterdrcke Fehlermeldungen ber nicht vorhandene oder unlesbare
Dateien. Anmerkung zur Portierbarkeit: Im Gegensatz zu GNU
grep verhielt sich das ursprngliche 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 ursprnglichen grep funktionieren
mssen, sollten deshalb weder -q noch -s verwenden und statt
dessen die Ausgabe nach /dev/null umleiten.
-U, --binary
Verarbeite die Eingaben als Binrdateien. Unter MS-DOS und MS-
Windows versucht grep, den Dateityp zu bestimmen, indem es die
ersten 32kByte der Datei untersucht. In einer Textdatei ent-
fernt es daraufhin intern alle CR-Wagenrcklaufzeichen, damit ^
und $ in regulren Ausdrcken 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 kom-
binierten Wagenrcklauf und Zeilenumbruch (CR/LF) enden, arbeiten
manche regulre Ausdrcken fehlerhaft. Diese Option hat keine
Auswirkungen auf anderen Plattformen als MS-DOS und MS-Windows.
-u, --unix-byte-offsets
Zeigt Byte-Abstnde im Unix-Stil an. Mit Hilfe dieses Schalters
gibt grep Byte-Abstnde in Textdateien stets so aus, als wrden
sie nur ein einzelnes Zeilenumbruchsymbol am Zeilenende enthal-
ten. Mit anderen Worten: Ein eventuelles Wagenrcklaufsymbol am
Zeilenende wird nicht bercksichtigt. So erzeugt grep, angewandt
auf eine Textdatei im DOS-Format identische Resultate wie fr 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-Fehleraus-
gabekanal an. Die Versionsnummer sollte in allen Fehler-
berichten (siehe unten) mit angegeben werden.
-v, --invert-match
Invertiert das Suchmuster, so dass alle Zeilen ausgewhlt werden,
die nicht auf MUSTER passen.
-w, --word-regexp
Whlt nur solche Zeilen aus, deren Treffer aus kompletten Wrtern
bestehen. Im einzelnen verluft der Test so, dass eine passende
Zeichenkette entweder am Zeilenanfang beginnen muss oder auf ein
Zeichen folgt, das nicht zu den Wortaufbau-Zeichen gehrt.
Ebenso muss das Ende der Zeichenkette entweder mit dem Zeile-
nende zusammenfallen, oder es wird nicht gefolgt von einem der
Wortaufbau-Zeichen. Wortaufbau-Zeichen sind alle Buchstaben,
Ziffern sowie der Unterstrich.
-x, --line-regexp
Whlt nur solche Zeilen aus, deren Treffer die komplette Zeile
umfasst.
-y Ein veraltetes Synonym fr -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 dafr, dass die Ausgabe selbst
in Gegenwart ungewhnlicher 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.
Unter einem regulren Ausdruck versteht man ein Muster, das eine bes-
timmte Menge von Zeichenketten beschreibt. Regulre Ausdrcke werden
ganz hnlich aufgebaut wie arithmetische Ausdrcke, indem man sie mit
Hilfe verschiedener Operatoren aus kleineren Ausdrcken zusammensetzt.
Grep versteht zwei verschiedene Klassen regulrer Ausdrcke: "gewhnliche"
und "erweiterte". Eine Unterscheidung, die fr GNU grep keine Rolle
spielt, da beide Varianten gleich mchtig sind. In anderen grep-Imple-
mentierungen steht mit gewhnlichen regulren Ausdrcken jedoch nur ein
eingeschrnkter Funktionsumfang zur Verfgung. Die folgende Beschreibung
bezieht sich auf erweiterte regulre Ausdrcke; die Unterschiede zu
gewhnlichen regulren Ausdrcken sind im Anschluss daran zusammengefasst.
Grundlegendster Baustein sind die regulren Ausdrcke, die auf ein
einzelnes Zeichen passen. Die meisten Zeichen, speziell alle Buch-
staben und Ziffern, sind zugleich regulre Ausdrcke, die auf sich selbst
passen. Alle Metazeichen, die eine besondere Bedeutung besitzen, knnen
durch einen vorausgehenden Rckstrich geschtzt 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 regulre 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. Schlielich gibt es noch
eine Reihe vordefinierter Klassen von Zeichen, im einzelnen: [:alnum:]
(Buchstaben und Ziffern), [:alpha:] (Buchstaben), [:cntrl:] (Steuerze-
ichen), [:digit:] (Ziffern), [:graph:] (graphische Zeichen, das heit
[:alnum:] und [:punct:]), [:lower:] (Kleinbuchstaben), [:print:]
(druckbare Zeichen), [:punct:] (Satzzeichen), [:space:] (Leerraum),
[:upper:] (Grobuchstaben) und [:xdigit:] (Ziffern des Hexadezimalsys-
tems). So bedeutet beispielsweise [[:alnum:]] fr gewhnlich dasselbe
wie [0-9A-Za-z], jedoch hngt die zweite Form ab von der POSIX-Lnderein-
stellung und ASCII-Kodierung der Zeichen, whrend die erste Form davon
unabhngig ist. (Man beachte, dass die eckigen Klammern Teil des sym-
bolischen Namens der einzelnen Klassen sind. Zustzlich dazu mssen noch
die eckigen Klammern angegeben werden, die eine Liste von Zeichen
begrenzen.) Die meisten Metazeichen verlieren innerhalb einer Zeichen-
kette ihre besondere Bedeutung. Um ein ] selbst zu beschreiben, muss
es an erster Stelle der Kette gesetzt werden. Soll ^ als gewhnliches
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 fr [[:alnum:]], \W ein Synonym fr [^[: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 regulrer Ausdruck kann gefolgt werden von einem oder mehreren
Wiederholungsoperatoren:
? Das vorhergehende Objekt ist optional und tritt hchstens 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 hchstens m-mal
auf.
Zwei regulre Ausdrcke knnen aneinander gefgt werden. Der entstehende
regulre Ausdruck passt auf jede Zeichenkette, die aus zwei aneinander
gesetzten Teilketten besteht, sofern jede der Teilketten auf den
zugehrigen regulren Teilausdruck passt.
Sind zwei regulre Ausdrck durch den Infix-Operator | verbunden, so
passt der gesamte regulre Ausdruck auf jede Zeichenkette, die auf min-
destens einen der beiden Teilausdrcke passt.
Wiederholungsoperatoren besitzen hhere Prioritt als eine Aneinanderrei-
hung. Am niedrigsten ist die Prioritt der Alternative. Einzelne
Teilausdrcke knnen in Klammern gesetzt werden, um diese Regeln explizit
abzundern.
Die Rckwrtsreferenz \n - wobei n fr eine einzelne Ziffer steht -, passt
auf die Zeichenkette, die wiederum auf den vorhergehenden, eingeklam-
merten Teilausdruck Nummer n des regulren Ausdrucks gepasst hat.
In gewhnlichen regulren Ausdrcken besitzen die Metazeichen ?, +, {, },
|, ( und ) keine besondere Bedeutung. Statt dessen knnen die mit einem
Rckstrich geschtzten Versionen \?, \+, \{, \}, \|, \( und \) verwendet
werden.
Das Metazeichen { wurde im ursprnglichen egrep nicht untersttzt.
Andere Implementierungen untersttzen 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 ursprngliche Verhalten zu untersttzen indem es
annimmt, dass { keine besondere Bedeutung besitzt, falls es eine
ungltige Intervallbeschreibung einleiten wrde. So sucht beispielsweise
das Kommando egrep '{1' nach der zwei Zeichen langen Zeichenkette {1,
statt einen fehlerhaften regulren Ausdruck zu melden. Dieses Verhalten
ist in POSIX.2 als Erweiterung erlaubt. Portable Skripte sollten
darauf jedoch nicht vertrauen.
GREP_OPTIONS
Mit Hilfe dieser Variable lassen sich Standardoptionen
definieren, die vor alle explizit angegebenen Optionen gesetzt
werden. Enthlt GREP_OPTIONS beispielsweise '--binary-files=with-
out-match --directories=skip', so verhlt sich grep, als ob die
beiden Optionen --binary-files=without-match und --directo-
ries=skip auf der Kommandozeile vor allen weiteren Optionen
angegeben worden wren. Mehrere Optionen werden durch Leerzeichen
getrennt. Ein Rckstrich schtzt das folgende Zeichen, so dass
auch Optionen angegeben werden knnen, die selbst Leerzeichen
oder Rckstriche enthalten.
LC_ALL, LC_MESSAGES, LANG
Diese Variablen whlen die LC_MESSAGES-Lndereinstellung aus, die
festlegt, in welcher Sprache grep seine Meldungen ausgibt. Die
Lndereinstellung wird in der angegebenen Reihenfolge durch die
erste gesetzte Variable bestimmt. Falls keine der Umgebungsvari-
ablen gesetzt, der Katalog von Meldungen in der gewnschten
Sprache nicht verfgbar oder grep ohne Mehrsprachenuntersttzung
(NLS) bersetzt worden ist, wird amerikanisches Englisch verwen-
det.
LC_ALL, LC_CTYPE, LANG
Diese Variablen legen die LC_CTYPE-Lndereinstellung fest. Sie
bestimmt den Typ eines jeden Zeichens, beispielsweise welche
Zeichen als Leerraum angesehen werden, welche als Sonderzeichen
und welche als Buchstaben. Die Lndereinstellung wird in der
angegebenen Reihenfolge durch die erste gesetzte Variable bes-
timmt. Falls keine der Umgebungsvariablen gesetzt oder grep ohne
Mehrsprachenuntersttzung (NLS) bersetzt worden ist, wird die
POSIX-Einstellung verwendet.
POSIXLY_CORRECT
Falls gesetzt, verhlt sich grep strikt nach dem POSIX.2-Stan-
dard, andernfalls hnelt sein Verhalten eher dem anderer GNU-Pro-
gramme. POSIX.2 verlangt, dass Optionen, die nach einem
Dateinamen angegeben sind, als Dateinamen behandelt werden. Nor-
malerweise behandelt grep sie immer als Optionen, gleichgltig an
welcher Stelle sie auftreten. Ferner verlangt POSIX.2, unbekan-
nte Optionen als "unzulssig" anzuzeigen. In den Standardein-
stellungen meldet grep sie lediglich als "ungltig".
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 Kommandozeilenin-
terpreter kann diese Umgebungsvariable setzen um anzuzeigen,
welche der Argumente erzeugt worden sind durch Mustererkennung
von Dateinamen und deshalb keinesfalls als Optionen berck-
sichtigt werden sollen. Diese Verhalten steht nur in Verbindung
mit der GNU C-Bibliothek zur Verfgung und nur dann, wenn
POSIXLY_CORRECT nicht gesetzt ist.
Normalerweise zeigt ein Rckgabewert von 0 an, dass Treffer gefunden
worden sind, und 1, dass es keine Treffer gab. (Die Option -v kehrt
die Bedeutung der Rckgabewerte um.) Ein Rckgabewert von 2 zeigt ein
fehlerhaftes Suchmuster an, unzugngliche Eingabedateien oder andere
Systemfehler.
Berichte ber Fehler in grep sollten per E-Mail an bug-gnu-utils [AT] gnu.org
geschickt werden. Die Betreff-Zeile sollte das Wort "grep" enthalten.
Wiederholungsangaben im Konstrukt {m,n} knnen dazu fhren, dass grep
groe Mengen Speicherplatz verbraucht. Darber hinaus gibt es noch weit-
ere ungewhnliche regulre Ausdrcke, deren Verarbeitung exponentiell viel
Zeit und Speicher bentigt und dazu fhren kann, dass grep den Speicher-
platz erschpft.
Rckwrtsreferenzen sind sehr langsam und knnen exponentiell viel Zeit in
Anspruch nehmen.
26. Oktober 2002 GREP(1)