Der folgende Text stammt aus dem »Debian GNU/Linux Guide« von John Goerzen und Ossama Othman. Ins Deutsche übersetzt von Michael »grisu« Bramer. Der Text steht unter der GNU General Public License.
Regular Expressions
Ein »regular Expression« (dt. regulärer Ausdruck) ist eine Beschreibung einer Folge von Zeichen. Diese Beschreibung kann zum Durchsuchen einer Datei nach Stellen, die mit dem regular Expression übereinstimmen, verwendet werden. Regular Expressions arbeiten analog zu den Wildcards der Shell, sind aber komplexer aufgebaut und leistungsstärker.
Ein regular Expression besteht aus Text und Platzhaltern. Ein Platzhalter ist einfach ein Zeichen mit einer bestimmten Bedeutung.
Platzhalter sind: . * [] - \ ^ $.
Wenn ein regular Expression nur normalen Text enthält (also keine Platzhalter), wird nur genau dieser Text gefunden. Beispielsweise findet der regular Expression »mein regular Exrpession« den Text »mein regular Expression« und nichts anderes. Im Allgemeinen wird in regular Expressions die Groß- und Kleinschreibung beachtet.
Du kannst mit dem Kommando egrep alle Zeilen einer Datei anzeigen, die den regular Expression enthalten. Die Syntax lautet:
egrep ’regexp’ filename1 ...
Das einfache Anführungszeichen ist nicht immer erforderlich, es kann aber auch nicht schaden.
Wenn du beispielsweise alle Zeilen in der GPL finden möchtest, die den Begriff GNU enthalten, gib Folgendes ein:
konsolero@nitidelo ~ $ egrep ’GNU’ /usr/share/commom-licenses/GPL
egrep schreibt die Zeilen zur Standardausgabe. Wenn du alle Zeilen mit dem Wort freedom, gefolgt von unbekanntem Text, wiederum gefolgt von GNU auflisten möchtest, gib Folgendes ein:
konsolero@nitidelo ~ $ egrep ’freedom.*GNU’ /usr/share/common-licenses/GPL
Der . steht für »ein beliebiges Zeichen«. Das * bedeutet »keine, eine oder mehrere der vorhergehenden Angaben«, in diesem Fall: »kein, ein oder mehrere beliebige Zeichen .* passt damit auf jedes Zeichen. egrep überprüft nur zeilenweise, sodass freedom und GNU also in der gleichen Zeile stehen müssen.
Hier folgt eine Zusammenstellung der Platzhalter, die in regular Expressions verwendet werden können:
| . | passt auf jedes Zeichen außer auf einen Zeilenwechsel. |
| * | passt auf keine, eine oder mehrere der vorhergehenden Angaben. Der Ausdruck a* passt auf kein oder mehr kleine a, und .* passt auf kein oder mehr beliebige Zeichen. |
| [Zeichen] | Die Klammern müssen mindestens ein Zeichen enthalten. Der ganze Klammerausdruck passt auf genau eines der Zeichen der Liste. [abc] passt auf ein a, ein b oder ein c. Es passt nicht auf kein Zeichen und auch auf kein anderes als die drei angegebenen. |
| ^ | verbindet das Gesuchte mit dem Zeilenanfang. Der Ausdruck ^The passt nur auf The, wenn es am Zeilenanfang steht. Leerzeichen oder anderer Text vor dem The sind nicht erlaubt. Wenn Leerzeichen erlaubt sein sollen, können Sie kein oder mehr Leerzeichen durch die Angabe von ^ *The festlegen. |
| $ | verbindet das Gesuchte mit dem Zeilenende. Wird end$ angegeben, muss der Text end am Zeilenende stehen, ohne dass Leerzeichen oder weiterer Text folgt. |
| [^Zeichen] | Das ^ kehrt die Bedeutung der Klammern um. [^abc] passt auf ein beliebiges Zeichen außer a,b oder c. |
| [Zeichen-Zeichen] | Du kannst in den Klammern Bereiche angeben. Um alle Kleinbuchstaben suchen zu können, verwendest du [a-z]. Du kannst auch mehr als einen Bereich angeben. Um also die ersten oder die letzten drei Buchstaben des Alphabets zu suchen, schreibst du [a-cx-z]. Du kannst Bereiche mit einzelnen Zeichen und mit dem Platzhalter ^ mischen. Zum Beispiel bedeutet [^a-zBZ]: »Alles außer einem Kleinbuchstaben, einem großen B oder einem großen Z«. |
| () | Du kannst runde Klammern zum Gruppieren von Bestandteilen des regular Expression verwenden, so wie es in mathematischen Ausdrücken gemacht wird. |
| | | Der senkrechte Strich | bedeutet »oder«. Du kannst ihn dazu verwenden, eine Reihe von alternativen Ausdrücken anzugeben. In der Regel wirst du die Alternativen in Klammern setzen, etwa wie im folgenden Beispiel: c(ad|ab|at). Es passt auf cad oder cab oder cat. Ohne die Klammern würde die Angabe auf cad oder ab oder at passen. |
| \ | nimmt jedem besonderen Zeichen seine Bedeutung. Wenn du beispielsweise das Zeichen * finden möchtest, schreibst du \*. Durch den Backslash (umgekehrter Schrrägstrich) wird die spezielle Bedeutung von * ignoriert. |
Im Folgenden siehst du einige Beispiele, damit du ein Gefühl für regular Expressions bekommst:
| c.pe | findet cope, cape, caper |
| c\.pe | findet c.pe, c.per |
| sto*p | findet stp, stop, stoop |
| car.*n | findet carton, cartoon, carmen |
| xyz.* | findet xyz und alles was anschließend kommt |
| ^The | findet The, wenn es am Zeilenanfang steht. |
| atime$ | findet atime, wenn es am Zeilenende steht. |
| ^Only$ | findet eine zeile, die nur das Wort Only enthält – keine Leerzeichen, kein anderes Zeichen, absolut nichts. Nur Only darf dort stehen. |
| b[aou]rn | findet barn, born, burn. |
| Ver[D-F] | findet VerD, VerE, VerF. |
| Ver[^0-9] | findet Ver, gefolgt von keiner Ziffer. |
| the[ir][re] | findet their, therr, there, theie. |
| [A-Za-z][A-Za-z]* | findet alle Wörter, die nur aus Buchstaben bestehen und mindestens ein Zeichen umfassen. Es werden keine Zahlen oder Leerzeichen gefunden. |
