BEZEICHNUNG¶
grep, egrep, fgrep, rgrep - gibt Zeilen aus, die zu einem Suchmuster passen
ÜBERSICHT¶
grep [
OPTIONEN]
MUSTER [
DATEI...]
grep [
OPTIONEN] [
-e MUSTER |
-f DATEI]
[
DATEI...]
BESCHREIBUNG¶
grep sucht in den angegebenen
DATEIen (oder der Standardeingabe,
wenn keine Dateien oder ein einzelner Trenn-/Bindestrich (
-) als
Dateiname angegeben wurde) nach Zeilen, die auf das
MUSTER passen. Per
Voreinstellung gibt
grep die passenden Zeilen aus.
Darüber hinaus stehen die drei Programmvarianten
egrep,
fgrep
und
rgrep zur Verfügung. Sie entsprechen den Aufrufen
grep -E,
grep -F und
grep -r. Von dem
direkten Aufruf entweder als
egrep oder
fgrep wird abgeraten.
Die Programme werden bereitgestellt, damit historische Anwendungen, die sich
auf deren Existenz verlassen, ohne Modifikation laufen können.
OPTIONEN¶
- --help
- grep zeigt eine kurze Zusammenfassung der
Befehlszeilen-Optionen und die Adresse für Fehlerberichte an;
anschließend wird es beendet.
- -V, --version
- grep zeigt die Versionsnummer auf der
Standardfehlerausgabe an. Die Versionsnummer sollte in allen
Fehlerberichten (siehe unten) mit angegeben werden.
Wahl des Musters¶
- -E, --extended-regexp
- MUSTER soll als erweiterter regulärer Ausdruck
(extended regular expression, ERE, siehe unten) interpretiert werden. (
-E wird von POSIX gefordert.)
- -F, --fixed-strings
- Interpretiert MUSTER als Liste feststehender
Zeichenketten, die durch Zeilenumbruch getrennt sind. Für einen
Treffer muss mindestens eine der Zeichenketten passen. ( -F wird
von POSIX gefordert.)
- -G, --basic-regexp
- Interpretiert MUSTER als gewöhnlichen
regulären Ausdruck (basic regular expression, BRE, siehe unten). Das
ist die Voreinstellung.
- -P, --perl-regexp
- Interpretiert MUSTER als einen regulären
Perl-Ausdruck. Diese Option ist höchst experimentell. Es kann
vorkommen, dass grep -P wegen nicht implementierter Features
warnt.
Steuerung des Abgleichs¶
- -e MUSTER, --regexp=MUSTER
- Verwendet MUSTER als das Suchmuster. Damit
können mehrere Suchmuster angegeben oder Muster geschützt
werden, die mit einem Bindestrich ( -) anfangen. ( -e wird
von POSIX gefordert.)
- -f DATEI, --file=DATEI
- Liest die Suchmuster Zeile für Zeile aus DATEI
ein. Eine leere Datei enthält keine Suchmuster und erzielt deshalb
auch keine Treffer. ( -f wird von POSIX gefordert.)
- -i, --ignore-case
- Unterscheidet auf der Suche nach Treffern sowohl im
MUSTER als auch den Eingabedateien nicht zwischen Groß- und
Kleinschreibung. ( -i wird von POSIX gefordert.)
- -v, --invert-match
- Invertiert das Suchmuster, so dass alle Zeilen
ausgewählt werden, die nicht auf MUSTER passen. (-v
wird von POSIX gefordert.)
- -w, --word-regexp
- Wählt nur solche Zeilen aus, deren Treffer aus
vollständigen 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 darf kein Wortaufbau-Zeichen folgen.
Wortaufbau-Zeichen sind alle Buchstaben, Ziffern sowie der
Unterstrich.
- -x, --line-regexp
- Wählt nur solche Zeilen aus, deren Treffer die
komplette Zeile umfasst. ( -x wird von POSIX gefordert.)
- -y
- veraltetes Synonym für -i
Allgemeine Ausgabesteuerung¶
- -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.
- --color[=WANN],
--colour[= WANN]
- Schließt die gefundenen (nicht leeren) Zeichenketten,
passenden Zeilen, Kontextzeilen, Dateinamen, Zeilennummern, Byte-Offsets
und Separatoren (für Felder und Gruppen von Kontextzeilen) mit
Escape-Sequenzen ein, damit diese auf dem Terminal farbig angezeigt
werden. Die Farben werden durch die Umgebungsvariable GREP_COLORS
definiert. Die missbilligte Umgebungsvariable GREP_COLOR wird
weiterhin unterstützt, hat aber keine Priorität und sollte nicht
verwendet werden. WANN kann die Werte never, always
oder auto annehmen.
- -L, --files-without-match
- Statt der normalen Ausgabe wird der Name jeder Datei ohne
Treffer angezeigt. Die Suche endet beim ersten Treffer.
- -l, --files-with-matches
- Statt der normalen Ausgabe wird der Name jeder Datei mit
mindestens einem Treffer angezeigt. Die Suche endet beim ersten Treffer. (
-l wird von POSIX gefordert.)
- -m ZAHL, --max-count=ZAHL
- Beendet das Lesen einer Datei, nachdem ZAHL passende
Zeilen gefunden wurden. Wenn die Eingabe aus einer regulären Datei
stammt und ZAHL passende Zeilen ausgegeben wurden, positioniert
grep, bevor es endet, die Standardeingabe ungeachtet der Existenz
folgender Kontextzeilen direkt hinter der letzten passenden Zeile. Dies
ermöglicht einem aufrufenden Prozess die Fortsetzung der Suche. Wenn
grep nach ZAHL passenden Zeilen endet, gibt es alle
nachfolgenden Kontextzeilen aus. Wenn außerdem die Option -c
(oder --count) verwendet wird, gibt grep als Ergebnis keine
Zahl aus, die größer ist als ZAHL. Wenn die Option
-v ( --invert-match verwendet wird, endet grep nach
der Ausgabe von ZAHL nicht passenden Zeilen.
- -o, --only-matching
- Anstatt der gesamten Zeile werden nur die passenden (nicht
leeren) Teile ausgegeben. Jeder dieser Teile wird auf einer eigenen Zeile
ausgegeben.
- -q, --quiet, --silent
- Unterdrückt die normalen Ausgaben. Die Suche endet
sofort nach dem ersten Treffer und gibt auch beim Auftreten von Fehlern
den Status Null zurück. Lesen Sie auch die Beschreibung der Option
-s oder --no-messages. (-q wird von POSIX
gefordert.)
- -s, --no-messages
- Unterdrückt Fehlermeldungen über nicht vorhandene
oder nicht lesbare Dateien. Anmerkung zur Portierbarkeit: Im Gegensatz zu
GNU grep war das ursprüngliche (7th Edition Unix) grep
nicht POSIX-konform, da ihm die Option -q fehlte und die Option
-s sich so verhielt wie -q im heutigen GNU grep.
grep im USG-Stil fehlte ebenfalls -q, aber seine Option
-s verhielt sich wie GNU grep. Portable Shell-Skripte, die
auch mit dem ursprünglichen grep funktionieren müssen,
sollten deshalb weder -q noch -s verwenden und stattdessen
die Ausgabe (stdout und stderr) nach /dev/null umleiten. (
-s wird von POSIX gefordert.)
Präfix-Festlegung der Ausgabezeilen¶
- -b, --byte-offset
- Gibt vor jeder Ausgabezeile die Byte-Position in der Datei
relativ zum Dateianfang (0) an. Wenn -o (--only-matching)
angegeben wird, wird die Position des gefundenen Teils angezeigt.
- -H, --with-filename
- Gibt vor jedem Treffer den zugehörigen Dateinamen aus.
Das ist das Standardverhalten, wenn mehr als eine Datei untersucht
wird.
- -h, --no-filename
- Der Dateiname wird vor einem Treffer nicht ausgegeben. Das
ist das Standardverhalten bei der Suche in nur einer Datei (oder nur in
der Standardeingabe).
- --label=TEXT
- Zeigt tatsächlich aus der Standardeingabe gelesene
Eingaben an, als seien sie aus Datei TEXT gelesen. Das ist
besonders praktisch für die Realisierung von Werkzeugen wie
zgrep, z.B. gzip -cd foo.gz | grep --label=foo -H
irgendwas (siehe auch die Option -H).
- -n, --line-number
- Gibt vor jeder Zeile die Zeilennummer (gezählt ab 1)
innerhalb der aktuellen Eingabedatei aus. ( -n wird von POSIX
gefordert.)
- -T, --initial-tab
- Stellt sicher, dass das erste Zeichen des eigentlichen
Zeileninhalts auf einem Tabulatorstopp liegt, so dass die Ausrichtung der
Tabulatoren normal aussieht. Dies ist sinnvoll für die Optionen, die
ihrer Ausgabe einen Präfix voranstellen: -H, -n und
-b. Um die Wahrscheinlichkeit zu vergrößern, dass die
Zeilen aus einer einzelnen Datei alle in der gleichen Spalte beginnen,
bewirkt diese Option auch, dass (eventuell vorhandene) Zeilennummern und
Byte-Offsets mit minimaler Feldgröße ausgegeben werden.
- -u, --unix-byte-offsets
- Zeigt die Byte-Positionen im Unix-Stil an. Mit Hilfe dieses
Schalters gibt grep Byte-Positionen in Textdateien stets so aus,
als würden sie nur ein einzelnes Zeilenumbruchsymbol am Zeilenende
enthalten: Ein eventuelles Wagenrücklaufsymbol am Zeilenende wird
nicht berücksichtigt. So erzeugt grep die gleichen Resultate
wie auf einer UNIX-Maschine. Diese Option ist nur in Verbindung mit dem
Schalter -b wirksam. Auf anderen Plattformen als MS-DOS und
MS-Windows hat sie keine Auswirkung.
- -Z, --null
- Gibt statt des üblichen Trennzeichens nach jedem
Dateinamen ein Nullbyte (das ASCII-Zeichen NUL) aus. So gibt
beispielsweise grep -lZ nach jedem Dateinamen statt des
gebräuchlichen Zeilenumbruchs ein Null-Byte aus. Mit dieser Option
bleibt die Ausgabe selbst bei ungewöhnlichen Dateinamen, die
beispielsweise einen Zeilenumbruch enthalten, eindeutig. Diese Option kann
zusammen mit Befehlen wie find -print0, perl -0, sort
-z und xargs -0 zur Verarbeitung beliebiger Dateinamen
verwendet werden (auch solche, die Zeilenumbrüche enthalten).
Steuerung der Kontextzeilen¶
- -A ZAHL,
--after-context=ZAHL
- Zeigt ZAHL Kontextzeilen im Anschluss an eine auf
das Muster passende Zeile an. Gibt eine Zeile mit einem
Gruppentrennzeichen ( --) zwischen benachbarten Gruppen von
Treffern aus. Zusammen mit der Option -o oder
--only-matching hat diese Option keine Auswirkung und es wird eine
Warnung ausgegeben.
- -B ZAHL,
--before-context=ZAHL
- Zeigt ZAHL Kontextzeilen vor einer auf das Muster
passenden Zeile an.Gibt eine Zeile mit einem Gruppentrennzeichen (
--) zwischen benachbarten Gruppen von Treffern aus. Zusammen mit
der Option -o oder --only-matching hat diese Option keine
Auswirkung und es wird eine Warnung ausgegeben.
- -C [ZAHL], -ZAHL,
--context[ =ZAHL]
- Zeigt je ZAHL Kontextzeilen vor und nach einer auf
das Muster passenden Zeile an. Gibt eine Zeile mit einem
Gruppentrennzeichen ( --) zwischen benachbarten Gruppen von
Treffern aus. Zusammen mit der Option -o oder
--only-matching hat diese Option keine Auswirkung und es wird eine
Warnung ausgegeben.
Auswahl von Dateien und Verzeichnissen¶
- -a, --text
- Verarbeitet eine Binärdatei, als wäre sie
gewöhnlicher Text; dieser Schalter ist gleichwertig mit
--binary-files=text.
- --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. Als Standard wird für den
TYP binary angenommen. Normalerweise gibt grep
lediglich eine Meldung aus, dass es in einer binären Datei Treffer
gab, und schweigt, wenn nichts gefunden wurde. In der Einstellung
without-match überspringt grep Binärdateien, ohne
dort nach Treffern zu suchen. Der Schalter -I bewirkt dasselbe. Mit
der Einstellung text (äquivalent mit -a) bearbeitet
grep eine Binärdatei als sei sie eine Textdatei.
Warnung: grep --binary-files=text kann mit üblen
Nebenwirkungen binären »Müll« ausgeben, wenn die
Ausgabe auf eine Konsole geleitet wird und deren Treiber manche der
Binärdaten als Steuerzeichen interpretiert.
- -D AKTION,
--devices=AKTION
- Wenn die Eingabedatei ein Gerät, ein FIFO oder ein
Socket ist, wird sie mit AKTION verarbeitet. Die
Standard-AKTION ist read. Das bedeutet, dass Geräte wie
eine gewöhnliche Datei gelesen werden. Mit der AKTION
skip werden Geräte stillschweigend ausgelassen.
- -d AKTION,
--directories=AKTION
- Ist eine Eingabedatei ein Verzeichnis, wird es mit der
AKTION verarbeitet. In der Standardeinstellung read liest
grep das Verzeichnis wie eine gewöhnliche Datei ein. Ist
AKTION auf skip gesetzt, so werden Verzeichnisse
stillschweigend übersprungen. Steht AKTION auf recurse
oder wurde der Schalter -r benutzt, so durchsucht grep
rekursiv sämtliche Dateien unterhalb jedes Verzeichnisses.
- --exclude=GLOB
- Überspringt Dateien, deren Dateiname unter Verwendung
von Platzhaltern zu GLOB passt. Ein Dateinamen-»GLOB«
kann *, ? und [...] als Platzhalter und
\ zum Maskieren von Platzhalterzeichen oder des
Rückschrägstriches verwenden.
- --exclude-from=DATEI
- Überspringt Dateien, deren Dateinamen zu einem
(mittels Platzhalter-Abgleich wie unter --exclude beschrieben) aus
DATEI gelesenen Dateinamen-»GLOB« passen.
- --exclude-dir=VERZ
- Schließt Verzeichnisse, die zum Muster VERZ
passen, von der rekursiven Suche aus.
- -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.
- --include=GLOB
- Durchsucht nur Dateien, deren »base names« zu
(mittels Platzhalter-Abgleich wie unter --exclude beschrieben)
»GLOB« passen.
- -R, -r, --recursive
- Durchsucht rekursiv sämtliche Dateien unterhalb eines
Verzeichnisses. Die Option -d recurse hat dieselbe Bedeutung.
Weitere Optionen¶
- --line-buffered
- Verwendet bei der Ausgabe Zeilenpuffer. Das kann
Leistungseinbußen bewirken.
- --mmap
- Verwendet, falls möglich, beim Lesen der Eingabedaten
den Systemaufruf mmap(2) statt des üblichen read(2).
Unter gewissen Umständen erzielt --mmap bessere
Leistungswerte, ist jedoch unzuverlässiger und kann sogar zu
Programmabstürzen (inclusive core dumps) führen, wenn
beispielsweise eine Eingabedatei während der Suche verkleinert wird
oder ein Ein-/Ausgabefehler auftritt.
- -U, --binary
- Verarbeitet die Datei(en) als Binärdaten. Unter MS-DOS
und MS-Windows versucht grep, den Dateityp zu bestimmen, indem es
die ersten 32 kByte der Datei untersucht. In einer von grep zu
einer Textdatei erklärten Datei entfernt es intern alle
Wagenrücklaufzeichen (CR), 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 wurde. Falls es sich um eine
Textdatei handelt, deren Zeilen mit einem kombinierten Wagenrücklauf
und Zeilenumbruch (CR/LF) enden, arbeiten manche reguläre
Ausdrücke fehlerhaft. Diese Option hat auf anderen Plattformen als
MS-DOS und MS-Windows keine Auswirkungen.
- -z, --null-data
- Behandelt die Eingabe als einen Satz von Zeilen, von denen
jede mit einem Null-Byte (das ASCII-Zeichen NUL) anstelle eines
Zeilenvorschubs endet. Wie die Optionen -Z oder --null kann
diese Option zusammen mit Befehlen wie sort -z für die
Verarbeitung beliebiger Dateinamen eingesetzt werden.
REGULÄRE AUSDRÜCKE¶
Unter einem regulären Ausdruck versteht man ein Muster, das eine Menge von
Zeichenketten beschreibt. Reguläre Ausdrücke werden analog zu
arithmetischen Ausdrücken aufgebaut: Sie werden mit Hilfe verschiedener
Operatoren aus kleineren Ausdrücken zusammengesetzt.
grep versteht drei verschiedene Klassen regulärer Ausdrücke:
»gewöhnliche« (basic, BRE), »erweiterte« (extended,
ERE) und »perl« (PRCE). GNU
grep stellt für
gewöhnliche und erweiterte reguläre Ausdrücke die gleiche
Funktionalität bereit. In anderen 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 werden im
Anschluss daran zusammengefasst. Die PRCE-Ausdrücke stellen
zusätzliche Funktionen bereit und sind in pcresyntax (3) und pcrepattern
(3) dokumentiert, sind aber möglicherweise nicht auf jedem System
verfügbar.
Grundlegende Bausteine sind die regulären Ausdrücke, die auf ein
einzelnes Zeichen passen. Die meisten Zeichen, insbesondere 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 vorangestellten Rückschrägstrich geschützt werden.
Der Punkt
. steht für jedes einzelne Zeichen.
Zeichenklassen und Klammerausdrücke¶
Ein
Klammerausdruck ist eine durch
[ und
] eingeschlossene
Liste von Zeichen. Er passt auf jedes Zeichen aus der Liste. Beginnt die Liste
mit dem Symbol
^, so passt der Ausdruck auf alle Zeichen, die
nicht in der Liste enthalten sind. Beispielsweise passt der
reguläre Ausdruck
[0123456789] auf eine beliebige einzelne Ziffer.
Innerhalb eines Klammerausdrucks sind
Bereichsausdrücke (range
expressions) möglich. Ein
Bereichsausdruck besteht aus zwei durch
einen Bindestrich getrennten Zeichen. Er steht für ein einzelnes Zeichen
einschließlich der Begrenzungszeichen, das gemäß der
Sortierreihenfolge der Locale und dem Zeichensatz zwischen den beiden
Begrenzungszeichen liegt. Zum Beispiel ist in der Standard-Locale C
[ad] äquivalent zu
[abcd]. Viele Locales sortieren Zeichen
in der Wörterbuch-Reihenfolge. Dort ist
[ad] in der Regel nicht
gleichwertig mit
[abcd]; es wäre zum Beispiel gleichbedeutend mit
[aBbCcDd]. Um die traditionelle Interpretation von
Klammerausdrücken zu bewirken, können Sie die C-Locale verwenden.
Dazu setzen Sie die Umgebungsvariable
LC_ALL auf den Wert
C.
Schließlich gibt es noch einige vordefinierte Zeichenklassen innerhalb von
Klammerausdrücken mit (im Englischen) selbsterklärenden Namen. Das
sind 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:]] die Zeichenklasse der Ziffern
und Buchstaben in der aktuellen Locale. In der C-Locale und der
Zeichenkodierung ASCII ist dies dasselbe wie
[0-9A-Za-z]. (Beachten
Sie, 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 eines Klammerausdrucks 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.
Setzen von Ankern¶
Die Metazeichen Dach
^ und Dollar
$ passen auf die leere
Zeichenkette am Anfang beziehungsweise Ende einer Zeile.
Das Backslash-Zeichen (Rückschrägstrich) und spezielle
Ausdrücke¶
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. Das Symbol
\w ist ein Synonym
für
[_[:alnum:]] und
\W steht für
[^_[:alnum:]].
Wiederholungen¶
Einem regulären Ausdruck können einer oder mehrere
Wiederholungsoperatoren folgen:
- ?
- 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 n-mal oder öfter
auf.
- {n,m}
- Das vorhergehende Objekt tritt mindestens n - und
höchstens m -mal auf.
Verknüpfung¶
Zwei reguläre Ausdrücke können verbunden werden. Der entstehende
reguläre Ausdruck passt auf jede Zeichenkette, die aus zwei aneinander
gesetzten Teilketten, die auf die zugehörigen Teilausdrücke passen,
besteht.
Alternativen¶
Sind zwei reguläre Ausdrücke durch den Infix-Operator
|
verbunden, so passt der gesamte reguläre Ausdruck auf jede Zeichenkette,
die auf einen der beiden Teilausdrücke passt.
Priorität¶
Wiederholungsoperatoren besitzen höhere Priorität als eine
Aneinanderreihung. Am niedrigsten ist die Priorität der Alternative.
Teilausdrücke können in Klammern gesetzt werden, um diese Regeln
explizit abzuändern.
Rückwärtsverweise und Teilausdrücke¶
Die Rückwärtsreferenz
\n - wobei
n für eine
einzelne Ziffer steht - steht für die Zeichenkette, die wiederum auf den
vorhergehenden, eingeklammerten Teilausdruck Nummer
n des
regulären Ausdrucks passt.
Vergleich gewöhnlicher und erweiterter regulärer
Ausdrücke¶
In gewöhnlichen regulären Ausdrücken besitzen die Metazeichen
?,
+,
{,
},
|,
( und
) keine
besondere Bedeutung. Stattdessen müssen die mit einem
Rückschrägstrich geschützten Versionen
\?,
\+,
\{,
\},
\|,
\( und
\) verwendet werden.
Das Metazeichen
{ wurde im ursprünglichen
egrep nicht
unterstützt. Andere Implementierungen unterstützen stattdessen
\{, sodass portable Skripte
{ in Mustern für
grep -E generell vermeiden sollten. Für das Zeichen
{
selbst sollte der Ausdruck
[{] verwendet werden.
GNU
egrep versucht, das ursprüngliche Verhalten zu unterstützen
indem es annimmt, dass
{ keine besondere Bedeutung besitzt, wenn es
eine ungültige Intervallbeschreibung einleitet. So sucht beispielsweise
der Befehl
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
dieses Konstrukt nicht verwenden.
UMGEBUNGSVARIABLEN¶
Das Verhalten von
grep wird durch die folgenden Umgebungsvariablen
bestimmt.
Die Locale für die Kategorie
LC_foo wird durch die
Untersuchung der drei Umgebungsvariablen
LC_ALL,
LC_foo
und
LANG (in dieser Reihenfolge) bestimmt. Die erste dieser Variablen,
die gesetzt ist, legt die Locale fest. Ist beispielsweise
LC_ALL nicht,
dafür aber
LC_MESSAGES auf
pt_BR gesetzt, dann wird
für die Kategorie
LC_MESSAGES brasilianisches Portugiesisch
verwendet. Die C-Locale wird verwendet, wenn keine dieser Umgebungsvariablen
gesetzt ist, wenn der Locale-Katalog nicht installiert ist oder wenn
grep ohne Unterstützung für Landessprachen (national language
support, NLS) kompiliert wurde.
- 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
Befehlszeile vor allen weiteren Optionen angegeben worden wären.
Mehrere Optionen werden durch Leerzeichen getrennt. Ein
Rückschrägstrich (backslash) schützt das folgende Zeichen,
so dass auch Optionen angegeben werden können, die selbst Leerzeichen
oder Rückschrägstriche enthalten.
- GREP_COLOR
- Diese Variable legt die Farbe fest, mit der (nicht leere)
Fundstellen des Suchausdrucks hervorgehoben werden. Sie ist veraltet, wird
aber immer noch unterstützt. Verwenden Sie stattdessen
GREP_COLORS. Die Fähigkeiten mt, ms und
mc von GREP_COLORS werden dieser Variable im Konfliktfall
vorgezogen. Die Variable kann nur die Farbe festlegen, mit der passender
nicht leerer Text in jeder Zeile mit einer Fundstelle markiert wird (das
ist eine ausgewählte Zeile, wenn die Befehlszeilenoption -v
weggelassen wird, oder eine Kontextzeile, wenn -v angegeben ist).
Der Standardwert ist 01;31. Er bedeutet roten Text in Fettdruck vor
dem Standard-Hintergrund des Terminals.
- GREP_COLORS
- Gibt die Farben und andere Attribute an, die für
Markierung verschiedener Elemente der Ausgabe verwendet werden. Ihr Wert
ist eine durch Doppelpunkte getrennte Liste von Fähigkeiten, deren
Standardwert gleich
ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36 ist. (Die
booleschen Fähigkeiten rv und ne sind also weggelassen
(d.h. auf auf false gesetzt)). Es werden die folgenden
Fähigkeiten unterstützt.
- sl=
- SGR-Teilsequenz für ganze ausgewählte Zeilen
(d.h. übereinstimmende Zeilen, wenn die Befehlszeilenoption -v
weggelassen wird oder nicht übereinstimmende Zeilen, wenn -v
angegeben wird). Wenn jedoch sowohl die boolesche Fähigkeit rv
als auch die Befehlszeilenoption -v angegeben werden, gilt die
Option stattdessen für passende Kontextzeilen. Der Standardwert ist
leer (d.h. das Standard-Farbpaar des Terminals).
- cx=
- SGR-Teilsequenz für ganze Kontextzeilen (d.h. nicht
übereinstimmende Zeilen, wenn die Befehlszeilenoption -v
weggelassen wird oder übereinstimmende Zeilen, wenn -v
angegeben wird). Wenn jedoch sowohl die boolesche Fähigkeit rv
als auch die Befehlszeilenoption -v angegeben werden, gilt die
Option stattdessen für nicht passende Zeilen. Der Standardwert ist
leer (d.h. das Standard-Farbpaar des Terminals).
- rv
- Boolescher Wert, der die Bedeutung der Fähigkeiten
sl= und cx= vertauscht, wenn die Befehlszeilenoption
-v gewählt wird. Der Standardwert ist false (d.h. die
Fähigkeit wird nicht genutzt).
- mt=01;31
- SGR-Teilsequenz für passenden, nicht leeren Text in
jeder passenden Zeile (d.h. einer ausgewählten Zeile, wenn die
Befehlszeilenoption -v weggelassen wird oder einer Kontextzeile,
wenn -v angegeben wurde). Die Wahl dieser Option ist gleichwertig
mit der Wahl des gleichen Wertes für ms= und mc=. Der
Standardwert ist fetter roter Text vor der aktuellen Hintergrundfarbe der
Zeile.
- ms=01;31
- SGR-Teilsequenz für passenden, nicht leeren Text in
einer ausgewählten Zeile. (Dies wird nur verwendet, wenn die
Befehlszeilenoption -v weggelassen wird.) Die Wirkung der
Fähigkeit sl= (oder cx=, wenn rv gesetzt ist)
bleibt aktiv, wenn diese auftritt. Der Standardwert ist ein fetter roter
Text vor dem aktuellen Zeilenhintergrund.
- mc=01;31
- SGR-Teilsequenz für passenden, nicht leeren Text in
einer Kontextzeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption
-v gewählt wird.) Die Wirkung der Fähigkeit sl=
(oder cx=, wenn rv gesetzt ist) bleibt aktiv, wenn diese
»kicks in«. Der Standardwert ist ein fetter roter Text vor dem
aktuellen Zeilenhintergrund.
- fn=35
- SGR-Teilsequenz für Dateinamen, die beliebigen
Kontextzeilen vorausgehen. Standard ist ein violetter Textvordergrund vor
dem Standardhintergrund des Terminals.
- ln=32
- SGR-Teilsequenz für Zeilennummern, die beliebigen
Kontextzeilen vorausgehen. Standard ist ein grüner Textvordergrund
vor dem Standardhintergrund des Terminals.
- bn=32
- SGR-Teilsequenz für »Byte Offsets«, die
beliebigen Kontextzeilen vorausgehen. Standard ist ein grüner
Textvordergrund vor dem Standardhintergrund des Terminals.
- se=36
- SGR-Teilsequenz für Separatoren, die zwischen die
Felder für ausgewählte Zeilen ( :), für
Kontextzeilen ( -) und zwischen Gruppen von benachbarten Zeilen
(wenn ein von Null verschiedener Kontext gewählt wurde ( --))
eingefügt werden. Der Standardwert ist ein blaugrüner (cyan)
Textvordergrund vor dem Standardhintergrund des Terminals.
- ne
- Boolescher Wert, der das Löschen bis zum Zeilenende
mittels »Erase in Line (EL) to Right« ( \33[K)
verhindert, wenn ein eingefärbtes Element endet. Er wird für
Terminals benötigt, die EL nicht unterstützten. Ansonsten ist er
nützlich für Terminals, für die die boolesche
Terminfo-Fähigkeit back_color_erase (bce) nicht gilt,
wenn die gewählten Markierungsfarben nicht den Hintergrund
beeinflussen oder wenn EL zu langsam ist oder zu viel Flackern verursacht.
Der Standardwert ist false (d.h. die Fähigkeit wird
weggelassen).
Beachten Sie, dass boolesche Fähigkeiten keinen
=-Teil aufweisen.
Sie werden per Vorgabe weggelassen (d.h. auf false gesetzt) und werden
aktiviert, wenn sie angegeben werden.
Im Abschnitt »Wahl der grafischen Darstellung« (Select Graphic
Rendition, SGR) der Dokumentation des Textterminals finden Sie zulässige
Werte und ihre Bedeutung als Zeichenattribute. Diese Teilzeichenkettenwerte
sind ganze Zahlen in Dezimaldarstellung und können mit einem Semikolon
verbunden werden.
grep erzeugt aus dem Ergebnis eine vollständige
SGR-Sequenz (
\33[...
m). Gebräuchliche Bestandteile der
Sequenz sind
1 für fett,
4 für unterstrichen,
5
für blinken,
7 für inverse Darstellung,
39 für
Standard-Vordergrundfarbe,
30 bis
37 für die Farben im
Vordergrund,
90 bis
97 für Vordergrundfarben im
16-Farben-Modus,
38,5,0 bis
38,5,255 für Vordergrundfarben
in den 88-Farben- und 256-Farben-Modi,
49 für die
Standard-Hintergrundfarbe,
40 bis
47 für Hintergrundfarben,
100 bis
107 für Hintergrundfarben im 16-Farben-Modus und
48,5,0 bis
48,5,255 für Hintergrundfarben in den 88-Farben-
und 256-Farben-Modi.
- LC_ALL, LC_COLLATE, LANG
- Diese Variablen legen die Locale für die Kategorie
LC_CTYPE fest. Sie bestimmt die Sortierreihenfolge, mit der
Ausdrücke zur Angabe eines Bereichs wie beispielsweise [a-z]
ausgewertet werden.
- LC_ALL, LC_CTYPE, LANG
- Diese Variablen legen die Locale für die Kategorie
LC_CTYPE fest. Diese bestimmt den Zeichentyp eines jeden Zeichens,
beispielsweise welche Zeichen als Leerraum angesehen werden.
- LC_ALL, LC_MESSAGES, LANG
- Diese Variablen wählen die Locale für die
Kategorie LC_MESSAGES. Diese legt fest, in welcher Sprache
grep seine Meldungen ausgibt. Die Standard-Locale C verwendet
Meldungen in amerikanischem Englisch.
- POSIXLY_CORRECT
- Falls gesetzt, verhält sich grep strikt nach
dem POSIX.2-Standard. Anderenfalls ähnelt sein Verhalten eher dem
anderer GNU-Programme. POSIX.2 verlangt von Optionen, die nach einem
Dateinamen angegeben sind, dass sie 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 wird.
- _N_GNU_nonoption_argv_flags_
- (Hier ist N die numerische Kennung des
grep-Prozesses.) Falls das i-te Zeichen dieser
Umgebungsvariablen den Wert 1 hat, wird das i-te Argument
von grep nicht als Option verarbeitet, selbst wenn es wie eine
Option aussieht. Ein Befehlszeileninterpreter kann diese Umgebungsvariable
für jeden von ihm ausgeführten Befehl setzen, um anzuzeigen,
welche der Argumente durch Ersetzung von Platzhaltern 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.
RÜCKGABEWERT¶
Der Rückgabewert ist 0, wenn die gewählten Zeilen gefunden werden,
sonst 1. Wenn ein Fehler auftrat, ist der Rückgabewert 2. (Anmerkung:
POSIX-Code zur Fehlerbehandlung sollte auf »2« oder größer
prüfen.)
COPYRIGHT¶
Copyright 1998-2000, 2002, 2005-2012 Free Software Foundation, Inc.
Dies ist freie Software; siehe den Quelltext für Kopierbedingungen. Es gibt
KEINE Garantie, nicht einmal für MARKTFÄHIGKEIT oder EIGNUNG
FÜR EINEN BESTIMMTEN ZWECK.
FEHLER¶
Fehler berichten¶
Senden Sie Fehlerberichte zu
grep per E-Mail in englischer Sprache an die
Mailingliste
bug-greps@gnu.org, deren Webseite <
http://lists.gnu.org/mailman/listinfo/bug-grep> ist. Die Fehler von
grep können Sie unter <
http://savannah.gnu.org/bugs/?group=grep> verfolgen.
Bekannte Fehler¶
Eine große Zahl von Wiederholungen im Konstrukt
{m,n } kann dazu führen, dass
grep sehr viel 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.
SIEHE AUCH¶
Normale Handbuchseiten¶
awk(1),
cmp(1),
diff(1),
find(1),
gzip(1),
perl(1),
sed(1),
sort(1),
xargs(1),
zgrep(1),
mmap(2),
read(2),
pcre(3),
pcrepattern(3),
pcresyntax(3),
terminfo(5),
glob(7),
regex(7).
Handbuchseite für POSIX-Programmierer¶
grep(1p)
TeXinfo-Dokumentation¶
Die vollständige Dokumentation für
grep wird als
TeXinfo-Handbuch gepflegt. Wenn die Programme
info und
grep auf
Ihrem Rechner ordnungsgemäß installiert sind, können Sie mit
dem Befehl
- info grep
auf das vollständige Handbuch zugreifen.
ANMERKUNGEN¶
GNU' ist nicht Unix, aber Unix ist eine Bestie; sein Plural ist Unixen.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard
Schauer <Martin.E.Schauer@gmx.de> und Tobias Quathamer
<toddy@debian.org> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public
License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird
KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.