Upline: Infos & Dokus Administration Linux Linux manpages

man grep


Eines der mächtigsten Werkzeuge zur Suche nach bestimmten Inhalten und zur Ausgabe spezifischer Zeilen aus einer Datei etc. ist das Tool grep. Dieses Tool zur Filterung von Inhalten läßt sich z.B. hervorragend zur Auswertung von Logfiles nutzen und wird auch oft in Shell-Scripten benötigt, die beispielsweise Software nur bestimmten Usern zuweisen sollen und dazu die Datei /etc/passwd filtern müssen. Eine weitere häufige Anwendung ist die Filterung der mittels ps erzeugten Prozessliste nach bestimmten Prozessen. Wärend grep zeilenweise arbeitet, kann man mittels der ergänzenden Nutzung von cut zusätzlich auch noch Spalten ausschneiden und somit relativ einfach Textdatenbanken verarbeiten.
Da diese manpage sehr umfangreich ist und im Original auch noch "ganz nebenbei" eine komplette Beschreibung der Nutzung von regulären Ausdrücke beinhaltet und man diese nicht nur für grep gebrauchen kann, habe ich diese zur besseren Übersicht abgetrennt.
Nachfolgend kommt die unter der GPL stehende Original-Version der Manpage zum Befehl grep.

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 selbiges. Vorsicht ist mit der Einstellung text geboten, da grep hier die passenden Zeilen direkt anzeigt. Das kann Probleme verursachen, 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 bzw. --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 dieses 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 Verzeichnisse stillschweigend übersprungen. Steht AKTION auf recurse oder wurde der Schalter -r gesetzt, 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.
-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.

Weitere Informationen (in der man-page eigentlich hier integriert) finden sich unter Reguläre Ausdrücke.

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 im folgenden 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 durch Mustererkennung von Dateinamen erzeugt worden sind und deshalb keinesfalls als Optionen berücksichtigt werden sollen. Dieses 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.

Dienstprogramme für Benutzer 26. Oktober 2002 GREP(1)