ManPage:grep

Aus LinWiki.de

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 Ein-
       stellung 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 übersprun-
       gen.  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 Voreinstel-
       lung.

-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 einzule-
       sen.  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-mes-
       sages 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 ver-
       wenden 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  --directo-
       ries=skip',  so verhält sich grep, als ob die beiden Optionen --binary-files=without-match und --directo-
       ries=skip auf der Kommandozeile vor allen weiteren Optionen angegeben worden wären. Mehrere Optionen wer-
       den  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 Optio-
       nen  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.

Diese Seite wurde zuletzt am 20. Mai 2005 um 20:54 Uhr geändert.
Diese Seite wurde bisher 3.847-mal abgerufen.