.\" -*- coding: UTF-8 -*- .if !\n(.g \{\ . if !\w|\*(lq| \{\ . ds lq `` . if \w'\(lq' .ds lq "\(lq . \} . if !\w|\*(rq| \{\ . ds rq '' . if \w'\(rq' .ds rq "\(rq . \} .\} .\" GNU grep man page .ie t .ds Tx \s-1T\v'.4n'\h'-.1667'E\v'-.4n'\h'-.125'X\s0 . el .ds Tx TeX .de Id . ds Yr \\$4 . substring Yr 0 3 . ds Mn \\$4 . substring Mn 5 6 . ds Dy \\$4 . substring Dy 8 9 . \" ISO 8601 date, complete format, extended representation . ds Dt \\*(Yr-\\*(Mn-\\*(Dy .. .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GREP 1 \*(Dt "GNU grep 2.20" "Dienstprogramme für Benutzer" .hy 0 . .SH BEZEICHNUNG grep, egrep, fgrep, rgrep \- gibt Zeilen aus, die zu einem Suchmuster passen . .SH ÜBERSICHT \fBgrep\fP [\fIOPTIONEN\fP] \fIMUSTER\fP [\fIDATEI\fP.\|.\|.] .br \fBgrep\fP [\fIOPTIONEN\fP] [\fB\-e\fP \fIMUSTER\fP | \fB\-f\fP \fIDATEI\fP] [\fIDATEI\fP.\|.\|.] . .SH BESCHREIBUNG \fBgrep\fP sucht in den angegebenen \fIDATEI\fPen (oder der Standardeingabe, wenn keine Dateien oder ein einzelner Trenn\-/Bindestrich (\fB\-\fP) als Dateiname angegeben wurde) nach Zeilen, die auf das \fIMUSTER\fP passen. Per Voreinstellung gibt \fBgrep\fP die passenden Zeilen aus. .PP Darüber hinaus stehen die drei Programmvarianten \fBegrep\fP, \fBfgrep\fP und \fBrgrep\fP zur Verfügung. Sie entsprechen den Aufrufen \fBgrep\ \-E\fP, \fBgrep\ \-F\fP und \fBgrep\ \-r\fP. Von dem direkten Aufruf entweder als \fBegrep\fP oder \fBfgrep\fP wird abgeraten. Die Programme werden bereitgestellt, damit historische Anwendungen, die sich auf deren Existenz verlassen, ohne Modifikation laufen können. . .SH OPTIONEN .SS "Allgemeine Programminformationen" .TP \fB\-\^\-help\fP \fBgrep\fP zeigt eine kurze Zusammenfassung der Befehlszeilen\-Optionen und die Adresse für Fehlerberichte an; anschließend wird es beendet. .TP \fB\-V\fP, \fB\-\^\-version\fP \fBgrep\fP zeigt die Versionsnummer auf der Standardfehlerausgabe an. Die Versionsnummer sollte in allen Fehlerberichten (siehe unten) mit angegeben werden. .SS "Wahl des Musters" .TP \fB\-E\fP, \fB\-\^\-extended\-regexp\fP \fIMUSTER\fP soll als erweiterter regulärer Ausdruck (extended regular expression, ERE, siehe unten) interpretiert werden. (\fB\-E\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-F\fP, \fB\-\^\-fixed\-strings\fP Interpretiert \fIMUSTER\fP als Liste feststehender Zeichenketten (nicht als reguläre Ausdrücke), die durch Zeilenumbruch getrennt sind. Für einen Treffer muss mindestens eine der Zeichenketten passen. (\fB\-F\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-G\fP, \fB\-\^\-basic\-regexp\fP Interpretiert \fIMUSTER\fP als gewöhnlichen regulären Ausdruck (basic regular expression, BRE, siehe unten). Das ist die Voreinstellung. .TP \fB\-P\fP, \fB\-\^\-perl\-regexp\fP Interpretiert \fIMUSTER\fP als einen regulären Perl\-Ausdruck. Diese Option ist höchst experimentell. Es kann vorkommen, dass \fBgrep \-P\fP wegen nicht implementierter Features warnt. .SS "Steuerung des Abgleichs" .TP \fB\-e\fP\fI MUSTER\fP,\fB \-\^\-regexp=\fP\fIMUSTER\fP Verwendet \fIMUSTER\fP als das Suchmuster. Damit können mehrere Suchmuster angegeben oder Muster geschützt werden, die mit einem Bindestrich (\fB\-\fP) anfangen. (\fB\-e\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-f\fP\fI DATEI\fP,\fB \-\^\-file=\fP\fIDATEI\fP Liest die Suchmuster Zeile für Zeile aus \fIDATEI\fP ein. Eine leere Datei enthält keine Suchmuster und erzielt deshalb auch keine Treffer. (\fB\-f\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-i\fP, \fB\-\^\-ignore\-case\fP Unterscheidet auf der Suche nach Treffern sowohl im \fIMUSTER\fP als auch den Eingabedateien nicht zwischen Groß\- und Kleinschreibung. (\fB\-i\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-v\fP, \fB\-\^\-invert\-match\fP Invertiert das Suchmuster, so dass alle Zeilen ausgewählt werden, die nicht auf \fIMUSTER\fP passen. (\fB\-v\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-w\fP, \fB\-\^\-word\-regexp\fP 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. .TP \fB\-x\fP, \fB\-\^\-line\-regexp\fP Wählt nur solche Zeilen aus, deren Treffer die komplette Zeile umfasst. Diese Option hat den gleichen Effekt wie die Zeichen ^ und $ im regulären Ausdruck. (\fB\-x\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-y\fP veraltetes Synonym für \fB\-i\fP .SS "Allgemeine Ausgabesteuerung" .TP \fB\-c\fP, \fB\-\^\-count\fP Statt die passenden Zeilen direkt anzuzeigen, wird lediglich ihre Anzahl pro Eingabedatei ausgegeben. Ist zusätzlich die Option \fB\-v\fP, \fB\-\^\-invert\-match\fP (siehe unten) angegeben, zählt \fBgrep\fP die Zeilen ohne Treffer. .TP \fB\-\^\-color\fP[\fB=\fP\fIWANN\fP], \fB\-\^\-colour\fP[\fB=\fP\fIWANN\fP] 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 \fBGREP_COLORS\fP definiert. Die missbilligte Umgebungsvariable \fBGREP_COLOR\fP wird weiterhin unterstützt, hat aber keine Priorität und sollte nicht verwendet werden. \fIWANN\fP kann die Werte \fBnever\fP, \fBalways\fP oder \fBauto\fP annehmen. .TP \fB\-L\fP, \fB\-\^\-files\-without\-match\fP Statt der normalen Ausgabe wird der Name jeder Datei ohne Treffer angezeigt. Die Suche endet beim ersten Treffer. .TP \fB\-l\fP, \fB\-\^\-files\-with\-matches\fP Statt der normalen Ausgabe wird der Name jeder Datei mit mindestens einem Treffer angezeigt. Die Suche endet beim ersten Treffer. (\fB\-l\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-m\fP\fI ZAHL\fP,\fB \-\^\-max\-count=\fP\fIZAHL\fP Beendet das Lesen einer Datei, nachdem \fIZAHL\fP passende Zeilen gefunden wurden. Wenn die Eingabe aus einer regulären Datei stammt und \fIZAHL\fP passende Zeilen ausgegeben wurden, positioniert \fBgrep\fP, 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 \fBgrep\fP nach \fIZAHL\fP passenden Zeilen endet, gibt es alle nachfolgenden Kontextzeilen aus. Wenn außerdem die Option \fB\-c\fP (oder \fB\-\^\-count\fP) verwendet wird, gibt \fBgrep\fP als Ergebnis keine Zahl aus, die größer ist als \fIZAHL\fP. Wenn die Option \fB\-v\fP (\fB\-\^\-invert\-match\fP verwendet wird, endet \fBgrep\fP nach der Ausgabe von \fIZAHL\fP nicht passenden Zeilen. .TP \fB\-o\fP, \fB\-\^\-only\-matching\fP Anstatt der gesamten Zeile werden nur die passenden (nicht leeren) Teile ausgegeben. Jeder dieser Teile wird auf einer eigenen Zeile ausgegeben. .TP \fB\-q\fP, \fB\-\^\-quiet\fP, \fB\-\^\-silent\fP 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 \fB\-s\fP oder \fB\-\-no\-messages\fP. (\fB\-q\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-s\fP, \fB\-\^\-no\-messages\fP Unterdrückt Fehlermeldungen über nicht vorhandene oder nicht lesbare Dateien. Anmerkung zur Portierbarkeit: Im Gegensatz zu \s-1GNU\s0 \fBgrep\fP war das ursprüngliche (7th Edition Unix) \fBgrep\fP nicht \s-1POSIX\s0\-konform, da ihm die Option \fB\-q\fP fehlte und die Option \fB\-s\fP sich so verhielt wie \fB\-q\fP im heutigen \s-1GNU\s0 \fBgrep\fP. \fBgrep\fP im \s-1USG\s0\-Stil fehlte ebenfalls \fB\-q\fP, aber seine Option \fB\-s\fP verhielt sich wie \s-1GNU\s0 \fBgrep\fP. Portable Shell\-Skripte, die auch mit dem ursprünglichen \fBgrep\fP funktionieren müssen, sollten deshalb weder \fB\-q\fP noch \fB\-s\fP verwenden und stattdessen die Ausgabe (stdout und stderr) nach \fI/dev/null\fP umleiten. (\fB\-s\fP wird von \s-1POSIX\s0 gefordert.) .SS "Präfix\-Festlegung der Ausgabezeilen" .TP \fB\-b\fP, \fB\-\^\-byte\-offset\fP Gibt vor jeder Ausgabezeile die Byte\-Position in der Datei relativ zum Dateianfang (0) an. Wenn \fB\-o\fP (\fB\-\^\-only\-matching\fP) angegeben wird, wird die Position des gefundenen Teils angezeigt. .TP \fB\-H\fP, \fB\-\^\-with\-filename\fP Gibt vor jedem Treffer den zugehörigen Dateinamen aus. Das ist das Standardverhalten, wenn mehr als eine Datei untersucht wird. .TP \fB\-h\fP, \fB\-\^\-no\-filename\fP Der Dateiname wird vor einem Treffer nicht ausgegeben. Das ist das Standardverhalten bei der Suche in nur einer Datei (oder nur in der Standardeingabe). .TP \fB\-\^\-label=\fP\fITEXT\fP Zeigt tatsächlich aus der Standardeingabe gelesene Eingaben an, als seien sie aus Datei \fITEXT\fP gelesen. Das ist besonders praktisch für die Realisierung von Werkzeugen wie \fBzgrep\fP, z.B. \fBgzip \-cd foo.gz | grep \-\-label=foo \-H irgendwas\fP (siehe auch die Option \fB\-H\fP). .TP \fB\-n\fP, \fB\-\^\-line\-number\fP Gibt vor jeder Zeile die Zeilennummer (gezählt ab 1) innerhalb der aktuellen Eingabedatei aus. (\fB\-n\fP wird von \s-1POSIX\s0 gefordert.) .TP \fB\-T\fP, \fB\-\^\-initial\-tab\fP 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: \fB\-H\fP, \fB\-n\fP und \fB\-b\fP. 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. .TP \fB\-u\fP, \fB\-\^\-unix\-byte\-offsets\fP Zeigt die Byte\-Positionen im Unix\-Stil an. Mit Hilfe dieses Schalters gibt \fBgrep\fP 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 \fBgrep\fP die gleichen Resultate wie auf einer UNIX\-Maschine. Diese Option ist nur in Verbindung mit dem Schalter \fB\-b\fP wirksam. Auf anderen Plattformen als MS\-DOS und MS\-Windows hat sie keine Auswirkung. .TP \fB\-Z\fP, \fB\-\^\-null\fP Gibt statt des üblichen Trennzeichens nach jedem Dateinamen ein Nullbyte (das \s-1ASCII\s0\-Zeichen \fBNUL\fP) aus. So gibt beispielsweise \fBgrep \-lZ\fP 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 \fBfind \-print0\fP, \fBperl \-0\fP, \fBsort \-z\fP und \fBxargs \-0\fP zur Verarbeitung beliebiger Dateinamen verwendet werden (auch solche, die Zeilenumbrüche enthalten). .SS "Steuerung der Kontextzeilen" .TP \fB\-A\fP\fI ZAHL\fP,\fB \-\^\-after\-context=\fP\fIZAHL\fP Zeigt \fIZAHL\fP Kontextzeilen im Anschluss an eine auf das Muster passende Zeile an. Gibt eine Zeile mit einem Gruppentrennzeichen (\fB\-\^\-\fP) zwischen benachbarten Gruppen von Treffern aus. Zusammen mit der Option \fB\-o\fP oder \fB\-\^\-only\-matching\fP hat diese Option keine Auswirkung und es wird eine Warnung ausgegeben. .TP \fB\-B\fP\fI ZAHL\fP,\fB \-\^\-before\-context=\fP\fIZAHL\fP Zeigt \fIZAHL\fP Kontextzeilen vor einer auf das Muster passenden Zeile an.Gibt eine Zeile mit einem Gruppentrennzeichen (\fB\-\^\-\fP) zwischen benachbarten Gruppen von Treffern aus. Zusammen mit der Option \fB\-o\fP oder \fB\-\^\-only\-matching\fP hat diese Option keine Auswirkung und es wird eine Warnung ausgegeben. .TP \fB\-C\fP [\fIZAHL\fP], \fB\-\fP\fIZAHL\fP, \fB\-\^\-context\fP[\fB=\fP\fIZAHL\fP] Zeigt je \fIZAHL\fP Kontextzeilen vor und nach einer auf das Muster passenden Zeile an. Gibt eine Zeile mit einem Gruppentrennzeichen (\fB\-\^\-\fP) zwischen benachbarten Gruppen von Treffern aus. Zusammen mit der Option \fB\-o\fP oder \fB\-\^\-only\-matching\fP hat diese Option keine Auswirkung und es wird eine Warnung ausgegeben. .SS "Auswahl von Dateien und Verzeichnissen" .TP \fB\-a\fP, \fB\-\^\-text\fP Verarbeitet eine Binärdatei, als wäre sie gewöhnlicher Text; dieser Schalter ist gleichwertig mit \fB\-\^\-binary\-files=text\fP. .TP \fB\-\^\-binary\-files=\fP\fITYP\fP Falls die ersten Bytes einer Datei anzeigen, dass sie Binärdaten enthält, soll angenommen werden, dass es sich um eine Datei vom Typ \fITYP\fP handelt. Als Standard wird für den \fITYP\fP \fBbinary\fP angenommen. Normalerweise gibt \fBgrep\fP lediglich eine Meldung aus, dass es in einer binären Datei Treffer gab, und schweigt, wenn nichts gefunden wurde. In der Einstellung \fBwithout\-match\fP überspringt \fBgrep\fP Binärdateien, ohne dort nach Treffern zu suchen. Der Schalter \fB\-I\fP bewirkt dasselbe. Mit der Einstellung \fBtext\fP (äquivalent mit \fB\-a\fP) bearbeitet \fBgrep\fP eine Binärdatei als sei sie eine Textdatei. \fIWarnung\fP: \fBgrep \-\^\-binary\-files=text\fP 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. .TP \fB\-D\fP\fI AKTION\fP,\fB \-\^\-devices=\fP\fIAKTION\fP Wenn die Eingabedatei ein Gerät, ein FIFO oder ein Socket ist, wird sie mit \fIAKTION\fP verarbeitet. Die Standard\-\fIAKTION\fP ist \fBread\fP. Das bedeutet, dass Geräte wie eine gewöhnliche Datei gelesen werden. Mit der \fIAKTION\fP \fBskip\fP werden Geräte stillschweigend ausgelassen. .TP \fB\-d\fP\fI AKTION\fP,\fB \-\^\-directories=\fP\fIAKTION\fP Ist eine Eingabedatei ein Verzeichnis, wird es mit der \fIAKTION\fP verarbeitet. In der Standardeinstellung ist \fIAKTION\fP auf \fBread\fP gesetzt, das bedeutet, dass Verzeichnisse wie gewöhnliche Dateien eingelesen werden. Ist \fIAKTION\fP auf \fBskip\fP gesetzt, so werden Verzeichnisse stillschweigend übersprungen. Steht \fIAKTION\fP auf \fBrecurse\fP, so werden sämtliche Dateien unterhalb jedes Verzeichnisses rekursiv durchsucht. Symbolische Links werden nur verfolgt, wenn sie auf der Befehlszeile angegeben wurden. Dies ist zu der Option \fB\-r\fP äquivalent. .TP \fB\-\^\-exclude=\fP\fIGLOB\fP Überspringt Dateien, deren Dateiname unter Verwendung von Platzhaltern zu \fIGLOB\fP passt. Ein Dateinamen\-»GLOB« kann \fB*\fP, \fB?\fP und \fB[\fP...\fB]\fP als Platzhalter und \fB\e\fP zum Maskieren von Platzhalterzeichen oder des Rückschrägstriches verwenden. .TP \fB\-\^\-exclude\-from=\fP\fIDATEI\fP Überspringt Dateien, deren Dateinamen zu einem (mittels Platzhalter\-Abgleich wie unter \fB\-\^\-exclude\fP beschrieben) aus \fIDATEI\fP gelesenen Dateinamen\-»GLOB« passen. .TP \fB\-\^\-exclude\-dir=\fP\fIVERZ\fP Schließt Verzeichnisse, die zum Muster \fIVERZ\fP passen, von der rekursiven Suche aus. .TP \fB\-I\fP Behandelt Binärdateien so, als würde ihr Inhalt nie auf das Suchmuster passen. Dies ist gleichbedeutend mit der Option \fB\-\^\-binary\-files=without\-match\fP. .TP \fB\-\^\-include=\fP\fIGLOB\fP Durchsucht nur Dateien, deren »base names« zu (mittels Platzhalter\-Abgleich wie unter \fB\-\^\-exclude\fP beschrieben) »GLOB« passen. .TP \fB\-r\fP, \fB\-\^\-recursive\fP Durchsucht sämtliche Dateien unterhalb jedes Verzeichnisses rekursiv. Symbolische Links werden nur verfolgt, wenn sie auf der Befehlszeile angegeben wurden. Dies ist zu der Option \fB\-d recurse\fP äquivalent. .TP \fB\-R\fP, \fB\-\^\-dereference\-recursive\fP Durchsucht sämtliche Dateien unterhalb jedes Verzeichnisses rekursiv. Allen symbolischen Links folgen, anders als \fB\-r\fP. .SS "Weitere Optionen" .TP \fB\-\^\-line\-buffered\fP Verwendet bei der Ausgabe Zeilenpuffer. Das kann Leistungseinbußen bewirken. .TP \fB\-U\fP, \fB\-\^\-binary\fP Verarbeitet die Datei(en) als Binärdaten. Unter MS\-DOS und MS\-Windows versucht \fBgrep\fP, den Dateityp zu bestimmen, indem es die ersten 32 kByte der Datei untersucht. In einer von \fBgrep\fP zu einer Textdatei erklärten Datei entfernt es intern alle Wagenrücklaufzeichen (CR), damit \fB^\fP und \fB$\fP in regulären Ausdrücken korrekt funktionieren. Die Angabe von \fB\-U\fP umgeht die ganze Raterei und weist \fBgrep\fP 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. .TP \fB\-z\fP, \fB\-\^\-null\-data\fP Behandelt die Eingabe als einen Satz von Zeilen, von denen jede mit einem Null\-Byte (das \s-1ASCII\s0\-Zeichen \fBNUL\fP) anstelle eines Zeilenvorschubs endet. Wie die Optionen \fB\-Z\fP oder \fB\-\^\-null\fP kann diese Option zusammen mit Befehlen wie \fBsort \-z\fP für die Verarbeitung beliebiger Dateinamen eingesetzt werden. . .SH "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. .PP \fBgrep\fP versteht drei verschiedene Klassen regulärer Ausdrücke: »gewöhnliche« (basic, BRE), »erweiterte« (extended, ERE) und »perl« (PRCE). \s-1GNU\s0\ \fBgrep\fP 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, funktionieren aber nur, wenn pcre im System verfügbar ist. .PP 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. .PP Der Punkt \fB.\&\fP steht für jedes einzelne Zeichen. .SS "Zeichenklassen und Klammerausdrücke" Ein \fIKlammerausdruck\fP ist eine durch \fB[\fP und \fB]\fP eingeschlossene Liste von Zeichen. Er passt auf jedes Zeichen aus der Liste. Beginnt die Liste mit dem Symbol \fB^\fP, so passt der Ausdruck auf alle Zeichen, die \fInicht\fP in der Liste enthalten sind. Beispielsweise passt der reguläre Ausdruck \fB[0123456789]\fP auf eine beliebige einzelne Ziffer. .PP Innerhalb eines Klammerausdrucks sind \fIBereichsausdrücke\fP (range expressions) möglich. Ein \fIBereichsausdruck\fP 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 \fB[ad]\fP äquivalent zu \fB[abcd]\fP. Viele Locales sortieren Zeichen in der Wörterbuch\-Reihenfolge. Dort ist \fB[ad]\fP in der Regel nicht gleichwertig mit \fB[abcd]\fP; es wäre zum Beispiel gleichbedeutend mit \fB[aBbCcDd]\fP. Um die traditionelle Interpretation von Klammerausdrücken zu bewirken, können Sie die C\-Locale verwenden. Dazu setzen Sie die Umgebungsvariable \fBLC_ALL\fP auf den Wert \fBC\fP. .PP Schließlich gibt es noch einige vordefinierte Zeichenklassen innerhalb von Klammerausdrücken mit (im Englischen) selbsterklärenden Namen. Das sind im Einzelnen: \fB[:alnum:]\fP (Buchstaben und Ziffern), \fB[:alpha:]\fP (Buchstaben), \fB[:cntrl:]\fP (Steuerzeichen), \fB[:digit:]\fP (Ziffern), \fB[:graph:]\fP (graphische Zeichen, das heißt [:alnum:] und [:punct:]), \fB[:lower:]\fP (Kleinbuchstaben), \fB[:print:]\fP (druckbare Zeichen), \fB[:punct:]\fP (Satzzeichen), \fB[:space:]\fP (Leerraum), \fB[:upper:]\fP (Großbuchstaben) und \fB[:xdigit:]\fP (Ziffern des Hexadezimalsystems). So bedeutet beispielsweise \fB[[:alnum:]]\fP die Zeichenklasse der Ziffern und Buchstaben in der aktuellen Locale. In der C\-Locale und der Zeichenkodierung \s-1ASCII\s0 ist dies dasselbe wie \fB[0\-9A\-Za\-z]\fP. (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 \fB]\fP selbst zu beschreiben, muss es an erster Stelle der Kette gesetzt werden. Soll \fB^\fP als gewöhnliches Zeichen auftreten, darf es nicht an erster Stelle stehen. Das Zeichen \fB\-\fP selbst muss an letzter Stelle der Kette auftauchen. .SS "Setzen von Ankern" Die Metazeichen Dach \fB^\fP und Dollar \fB$\fP passen auf die leere Zeichenkette am Anfang beziehungsweise Ende einer Zeile. .SS "Das Backslash\-Zeichen (Rückschrägstrich) und spezielle Ausdrücke" Ganz ähnlich passen die Symbole \fB\e<\fP und \fB\e>\fP auf die leere Zeichenkette am Anfang beziehungsweise Ende eines Wortes. Das Symbol \fB\eb\fP passt auf die leere Zeichenkette an einem Wortrand; \fB\eB\fP bezeichnet das Gegenteil davon und passt auf die leere Zeichenkette, falls die sich \fInicht\fP an einem Wortrand befindet. Das Symbol \fB\ew\fP ist ein Synonym für \fB[_[:alnum:]]\fP und \fB\eW\fP steht für \fB[^_[:alnum:]]\fP. .SS Wiederholungen Einem regulären Ausdruck können einer oder mehrere Wiederholungsoperatoren folgen: .PD 0 .TP \fB?\fP Das vorhergehende Objekt ist optional und tritt höchstens einmal auf. .TP \fB*\fP Das vorhergehende Objekt tritt kein Mal oder beliebig oft auf. .TP \fB+\fP Das vorhergehende Objekt tritt ein\- oder mehrmals auf. .TP \fB{\fP\fIn\fP\fB}\fP Das vorhergehende Objekt tritt genau \fIn\fP\-mal auf. .TP \fB{\fP\fIn\fP\fB,}\fP Das vorhergehende Objekt tritt \fIn\fP\-mal oder öfter auf. .TP \fB{,\fP\fIm\fP\fB}\fP Das vorhergehende Objekt tritt höchstens \fIm\fP\-mal auf. Dies ist eine \s-1GNU\s0\-Erweiterung. .TP \fB{\fP\fIn\fP\fB,\fP\fIm\fP\fB}\fP Das vorhergehende Objekt tritt mindestens \fIn\fP\- und höchstens \fIm\fP\-mal auf. .PD .SS 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. .SS Alternativen Sind zwei reguläre Ausdrücke durch den Infix\-Operator \fB|\fP verbunden, so passt der gesamte reguläre Ausdruck auf jede Zeichenkette, die auf einen der beiden Teilausdrücke passt. .SS 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. .SS "Rückwärtsverweise und Teilausdrücke" Die Rückwärtsreferenz \fB\e\fP\fIn\fP\& \- wobei \fIn\fP für eine einzelne Ziffer steht \- steht für die Zeichenkette, die wiederum auf den vorhergehenden, eingeklammerten Teilausdruck Nummer \fIn\fP des regulären Ausdrucks passt. .SS "Vergleich gewöhnlicher und erweiterter regulärer Ausdrücke" In gewöhnlichen regulären Ausdrücken besitzen die Metazeichen \fB?\fP, \fB+\fP, \fB{\fP, \fB}\fP, \fB|\fP, \fB(\fP und \fB)\fP keine besondere Bedeutung. Stattdessen müssen die mit einem Rückschrägstrich geschützten Versionen \fB\e?\fP, \fB\e+\fP, \fB\e{\fP, \fB\e}\fP, \fB\e|\fP, \fB\e(\fP und \fB\e)\fP verwendet werden. .PP Das Metazeichen \fB{\fP wurde im ursprünglichen \fBegrep\fP nicht unterstützt. Andere Implementierungen unterstützen stattdessen \fB\e{\fP, sodass portable Skripte \fB{\fP in Mustern für \fBgrep\ \-E\fP generell vermeiden sollten. Für das Zeichen \fB{\fP selbst sollte der Ausdruck \fB[{]\fP verwendet werden. .PP \s-1GNU\s0 \fBegrep\fP versucht, das ursprüngliche Verhalten zu unterstützen indem es annimmt, dass \fB{\fP keine besondere Bedeutung besitzt, wenn es eine ungültige Intervallbeschreibung einleitet. So sucht beispielsweise der Befehl \fBegrep '{1'\fP nach der zwei Zeichen langen Zeichenkette \fB{1\fP statt einen fehlerhaften regulären Ausdruck zu melden. Dieses Verhalten ist in \s-1POSIX\s0 als Erweiterung erlaubt. Portable Skripte sollten dieses Konstrukt nicht verwenden. . .SH UMGEBUNGSVARIABLEN Das Verhalten von \fBgrep\fP wird durch die folgenden Umgebungsvariablen bestimmt. .PP Die Locale für die Kategorie \fBLC_\fP\fIfoo\fP wird durch die Untersuchung der drei Umgebungsvariablen \fBLC_ALL\fP, \fBLC_\fP\fIfoo\fP und \fBLANG\fP (in dieser Reihenfolge) bestimmt. Die erste dieser Variablen, die gesetzt ist, legt die Locale fest. Ist beispielsweise \fBLC_ALL\fP nicht, dafür aber \fBLC_MESSAGES\fP auf \fBpt_BR\fP gesetzt, dann wird für die Kategorie \fBLC_MESSAGES\fP brasilianisches Portugiesisch verwendet. Die C\-Locale wird verwendet, wenn keine dieser Umgebungsvariablen gesetzt ist, wenn der Locale\-Katalog nicht installiert ist oder wenn \fBgrep\fP ohne Unterstützung für Landessprachen (national language support, \s-1NLS\s0) kompiliert wurde. .TP \fBGREP_OPTIONS\fP Mit Hilfe dieser Variable lassen sich Standardoptionen definieren, die vor alle explizit angegebenen Optionen gesetzt werden. Enthält \fBGREP_OPTIONS\fP beispielsweise \fB\(aq\-\^\-binary\-files=without\-match \-\^\-directories=skip\(aq\fP, so verhält sich \fBgrep\fP, als ob die beiden Optionen \fB\-\^\-binary\-files=without\-match\fP und \fB\-\^\-directories=skip\fP 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. .TP \fBGREP_COLOR\fP 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 \fBGREP_COLORS\fP. Die Fähigkeiten \fBmt\fP, \fBms\fP und \fBmc\fP von \fBGREP_COLORS\fP 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 \fB\-v\fP weggelassen wird, oder eine Kontextzeile, wenn \fB\-v\fP angegeben ist). Der Standardwert ist \fB01;31\fP. Er bedeutet roten Text in Fettdruck vor dem Standard\-Hintergrund des Terminals. .TP \fBGREP_COLORS\fP 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 \fBms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36\fP ist. (Die booleschen Fähigkeiten \fBrv\fP und \fBne\fP sind also weggelassen (d.h. auf auf \fBfalse\fP gesetzt)). Es werden die folgenden Fähigkeiten unterstützt. .RS .TP \fBsl=\fP SGR\-Teilsequenz für ganze ausgewählte Zeilen (d.h. übereinstimmende Zeilen, wenn die Befehlszeilenoption \fB\-v\fP weggelassen wird oder nicht übereinstimmende Zeilen, wenn \fB\-v\fP angegeben wird). Wenn jedoch sowohl die boolesche Fähigkeit \fBrv\fP als auch die Befehlszeilenoption \fB\-v\fP angegeben werden, gilt die Option stattdessen für passende Kontextzeilen. Der Standardwert ist leer (d.h. das Standard\-Farbpaar des Terminals). .TP \fBcx=\fP SGR\-Teilsequenz für ganze Kontextzeilen (d.h. nicht übereinstimmende Zeilen, wenn die Befehlszeilenoption \fB\-v\fP weggelassen wird oder übereinstimmende Zeilen, wenn \fB\-v\fP angegeben wird). Wenn jedoch sowohl die boolesche Fähigkeit \fBrv\fP als auch die Befehlszeilenoption \fB\-v\fP angegeben werden, gilt die Option stattdessen für nicht passende Zeilen. Der Standardwert ist leer (d.h. das Standard\-Farbpaar des Terminals). .TP \fBrv\fP Boolescher Wert, der die Bedeutung der Fähigkeiten \fBsl=\fP und \fBcx=\fP vertauscht, wenn die Befehlszeilenoption \fB\-v\fP gewählt wird. Der Standardwert ist false (d.h. die Fähigkeit wird nicht genutzt). .TP \fBmt=01;31\fP SGR\-Teilsequenz für passenden, nicht leeren Text in jeder passenden Zeile (d.h. einer ausgewählten Zeile, wenn die Befehlszeilenoption \fB\-v\fP weggelassen wird oder einer Kontextzeile, wenn \fB\-v\fP angegeben wurde). Die Wahl dieser Option ist gleichwertig mit der Wahl des gleichen Wertes für \fBms=\fP und \fBmc=\fP. Der Standardwert ist fetter roter Text vor der aktuellen Hintergrundfarbe der Zeile. .TP \fBms=01;31\fP SGR\-Teilsequenz für passenden, nicht leeren Text in einer ausgewählten Zeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption \fB\-v\fP weggelassen wird.) Die Wirkung der Fähigkeit \fBsl=\fP (oder \fBcx=\fP, wenn \fBrv\fP gesetzt ist) bleibt aktiv, wenn diese auftritt. Der Standardwert ist ein fetter roter Text vor dem aktuellen Zeilenhintergrund. .TP \fBmc=01;31\fP SGR\-Teilsequenz für passenden, nicht leeren Text in einer Kontextzeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption \fB\-v\fP gewählt wird.) Die Wirkung der Fähigkeit \fBsl=\fP (oder \fBcx=\fP, wenn \fBrv\fP gesetzt ist) bleibt aktiv, wenn diese »kicks in«. Der Standardwert ist ein fetter roter Text vor dem aktuellen Zeilenhintergrund. .TP \fBfn=35\fP SGR\-Teilsequenz für Dateinamen, die beliebigen Kontextzeilen vorausgehen. Standard ist ein violetter Textvordergrund vor dem Standardhintergrund des Terminals. .TP \fBln=32\fP SGR\-Teilsequenz für Zeilennummern, die beliebigen Kontextzeilen vorausgehen. Standard ist ein grüner Textvordergrund vor dem Standardhintergrund des Terminals. .TP \fBbn=32\fP SGR\-Teilsequenz für »Byte Offsets«, die beliebigen Kontextzeilen vorausgehen. Standard ist ein grüner Textvordergrund vor dem Standardhintergrund des Terminals. .TP \fBse=36\fP SGR\-Teilsequenz für Separatoren, die zwischen die Felder für ausgewählte Zeilen (\fB:\fP), für Kontextzeilen (\fB\-\fP) und zwischen Gruppen von benachbarten Zeilen (wenn ein von Null verschiedener Kontext gewählt wurde (\fB\-\^\-\fP)) eingefügt werden. Der Standardwert ist ein blaugrüner (cyan) Textvordergrund vor dem Standardhintergrund des Terminals. .TP \fBne\fP Boolescher Wert, der das Löschen bis zum Zeilenende mittels »Erase in Line (EL) to Right« (\fB\e\33[K\fP) 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 \fBback_color_erase\fP (\fBbce\fP) 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). .PP Beachten Sie, dass boolesche Fähigkeiten keinen \fB=\fP\-Teil aufweisen. Sie werden per Vorgabe weggelassen (d.h. auf false gesetzt) und werden aktiviert, wenn sie angegeben werden. .PP 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. \fBgrep\fP erzeugt aus dem Ergebnis eine vollständige SGR\-Sequenz (\fB\e\33[\fP...\fBm\fP). Gebräuchliche Bestandteile der Sequenz sind \fB1\fP für fett, \fB4\fP für unterstrichen, \fB5\fP für blinken, \fB7\fP für inverse Darstellung, \fB39\fP für Standard\-Vordergrundfarbe, \fB30\fP bis \fB37\fP für die Farben im Vordergrund, \fB90\fP bis \fB97\fP für Vordergrundfarben im 16\-Farben\-Modus, \fB38,5,0\fP bis \fB38,5,255\fP für Vordergrundfarben in den 88\-Farben\- und 256\-Farben\-Modi, \fB49\fP für die Standard\-Hintergrundfarbe, \fB40\fP bis \fB47\fP für Hintergrundfarben, \fB100\fP bis \fB107\fP für Hintergrundfarben im 16\-Farben\-Modus und \fB48,5,0\fP bis \fB48,5,255\fP für Hintergrundfarben in den 88\-Farben\- und 256\-Farben\-Modi. .RE .TP \fBLC_ALL\fP, \fBLC_COLLATE\fP, \fBLANG\fP Diese Variablen legen die Locale für die Kategorie \fBLC_CTYPE\fP fest. Sie bestimmt die Sortierreihenfolge, mit der Ausdrücke zur Angabe eines Bereichs wie beispielsweise \fB[a\-z]\fP ausgewertet werden. .TP \fBLC_ALL\fP, \fBLC_CTYPE\fP, \fBLANG\fP Diese Variablen legen die Locale für die Kategorie \fBLC_CTYPE\fP fest. Diese bestimmt den Zeichentyp eines jeden Zeichens, beispielsweise welche Zeichen als Leerraum angesehen werden. .TP \fBLC_ALL\fP, \fBLC_MESSAGES\fP, \fBLANG\fP Diese Variablen wählen die Locale für die Kategorie \fBLC_MESSAGES\fP. Diese legt fest, in welcher Sprache \fBgrep\fP seine Meldungen ausgibt. Die Standard\-Locale C verwendet Meldungen in amerikanischem Englisch. .TP \fBPOSIXLY_CORRECT\fP Falls gesetzt, verhält sich \fBgrep\fP strikt nach dem \s-1POSIX\s0\-Standard. Anderenfalls ähnelt sein Verhalten eher dem anderer \s-1GNU\s0\-Programme. \s-1POSIX\s0 verlangt von Optionen, die nach einem Dateinamen angegeben sind, dass sie als Dateinamen behandelt werden. Normalerweise behandelt \fBgrep\fP sie immer als Optionen, gleichgültig an welcher Stelle sie auftreten. Ferner verlangt \s-1POSIX\s0, unbekannte Optionen als »unzulässig« anzuzeigen. In den Standardeinstellungen meldet \fBgrep\fP sie lediglich als »ungültig«'. \fBPOSIXLY_CORRECT\fP deaktiviert auch \fB_\fP\fIN\fP\fB_GNU_nonoption_argv_flags_\fP, das im Folgenden genauer beschrieben wird. .TP \fB_\fP\fIN\fP\fB_GNU_nonoption_argv_flags_\fP (Hier ist \fIN\fP die numerische Kennung des \fBgrep\fP\-Prozesses.) Falls das \fIi\fP\-te Zeichen dieser Umgebungsvariablen den Wert \fB1\fP hat, wird das \fIi\fP\-te Argument von \fBgrep\fP 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 \s-1GNU\s0\-C\-Bibliothek zur Verfügung und nur dann, wenn \fBPOSIXLY_CORRECT\fP nicht gesetzt ist. . .SH 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.) . .SH COPYRIGHT Copyright 1998\-2000, 2002, 2005\-2014 Free Software Foundation, Inc. .PP 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. . .SH FEHLER .SS "Fehler berichten" Senden Sie Fehlerberichte zu \fBgrep\fP per E\-Mail in englischer Sprache an die Mailingliste \fBbug\-greps@gnu.org\fP, deren Webseite <\fBhttp://lists.gnu.org/mailman/listinfo/bug\-grep\fP> ist. Die Fehler von \fBgrep\fP können Sie unter <\fBhttp://savannah.gnu.org/bugs/?group=grep\fP> verfolgen. .SS "Bekannte Fehler" Eine große Zahl von Wiederholungen im Konstrukt \fB{\fP\fIm\fP\fB,\fP\fIn\fP\fB}\fP kann dazu führen, dass \fBgrep\fP 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 \fBgrep\fP den Speicherplatz erschöpft. .PP Rückwärtsreferenzen sind sehr langsam und können exponentiell viel Zeit in Anspruch nehmen. . .SH "SIEHE AUCH" .SS "Normale Handbuchseiten" awk(1), cmp(1), diff(1), find(1), gzip(1), perl(1), sed(1), sort(1), xargs(1), zgrep(1), read(2), pcre(3), pcresyntax(3), pcrepattern(3), terminfo(5), glob(7), regex(7). .SS "Handbuchseite für \s-1POSIX\s0\-Programmierer" grep(1p) .SS \*(Txinfo\-Dokumentation Die vollständige Dokumentation für \fBgrep\fP wird als \*(Txinfo\-Handbuch gepflegt, das Sie unter http://www.gnu.org/software/grep/manual/ lesen können. Wenn die Programme \fBinfo\fP und \fBgrep\fP auf Ihrem Rechner ordnungsgemäß installiert sind, können Sie mit dem Befehl .IP \fBinfo grep\fP .PP auf das vollständige Handbuch zugreifen. . .SH ANMERKUNGEN Diese Handbuchseite wird nur sporadisch aktualisiert, die vollständige Dokumentation ist meistens aktueller. .PP .\" Work around problems with some troff -man implementations. \s-1GNU\s0' ist nicht Unix, aber Unix ist eine Bestie; sein Plural ist Unixen. .br .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Tobias Quathamer und Mario Blättermann 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 .