Reguläre Ausdrücke

> Betriebssystem Linux

> > # Reguläre Ausdrücke und ihre Anwendung

> > Unix bietet viele Anwendungen, die bestimmte Begriffe suchen können oder anhand von bestimmten Begriffen bestimmte Aktionen durchführen können. Diese Begriffe sind dabei meistens sogenannte reguläre Ausdrücke (engl. regular expression). Dabei handelt es sich um Ausdrücke, die eine Art Jokerzeichen benutzen, um verschiedene Begriffe unter einem Suchbegriff anzusprechen. Der Mechanismus ist ähnlich dem der Jokerzeichen der Shell, die Zeichen haben aber grunsätzlich andere Bedeutung.

> > Die verschiedenen Programme kennen verschiedene Formen der regulären Ausdrücke, welche Ausdrücke von welchem Programm unterstützt werden, läßt sich meist über die entsprechende Handbuchseite herausfinden.

> > Wenn reguläre Ausdrücke von der Shell aus benutzt werden, so müssen sie in einfachen oder doppelten Anführungszeichen stehen, um zu verhindern, dass die Shell die Zeichen interpretiert.

> > Die gebräuchlichsten Sonderzeichen in regulären Ausdrücken sind:

> > c | Ein konstantes Zeichen c
> > . | Genau ein beliebiges Zeichen
> > .* | Folge von beliebigen Zeichen, auch die leere Folge
> > * | Das dem Sternchen vorangehende Zeichen beliebig oft, auch null mal
> > ? | Das dem Fragezeichen vorangehende Zeichen null oder einmal
> > + | Das dem Pluszeichen vorangehende Zeichen einmal oder öfter
> > {n,m} | Ein Wiederholungsintervall. Das der Klammer vorangehende Zeichen n bis m mal
> > {n} | Ein genaues Wiederholungsintervall. Das der Klammer vorangehende Zeichen genau n mal
> > [...] | Zeichenklasse, eins der Zeichen aus der Klammer
> > [...-...] | Zeichenklasse von bis
> > [^...] |
> > [^...-...] | Verneinte Zeichenklassen, keines der Zeichen aus der Klammer
> > ^ | Zeilenanfang
> > $ | Zeilenende
> > < | Wortanfang
> > > | Wortende
> > a1|a2 | Alternative Ausdrücke, Ausdruck a1 oder a2
> > (...) | Gruppe vo Ausdrücken
> > \ | Ausblendung der Sonderbedeutung des nachfolgenden Zeichens.

> > Um zum Beispiel alle Formen des Namens Maier (Mayr, Mair, Maier, Mayer, Meyer, Meier) in einem Ausdruck zu formulieren müßten wir schreiben:

> > [mM][ae][iy]e?r

> > Oft werden diese Ausdrücke nur zum Teil unterstützt, oder in leicht abgewandelter Form (\? statt ?). Typische Beispiele der Anwendung sind die Unix-Editoren, die ihre Suche- und Ersetze Funktionen alle auf diesen Ausdrücken aufbauen. Ein weiteres sehr wichtiges Programm, das die regulären Ausdrücke verwendet ist das im Folgende beschriebene grep.

> > ### grep

> > Das Programm grep durchsucht Dateien oder die Standard-Eingabe nach Mustern. Diese Muster können reguläre Ausdrücke sein. Die Anwendung ist sehr vielfältig, weil eben nicht nur Dateien, sondern auch die Standard-Eingabe durchsucht wird, grep also in Pipes eingesetzt werden kann. grep gibt die Zeilen aus, in denen das Muster gefunden wurde.

> > Um eine oder mehrere Datei(en) nach einem bestimmten Muster zu durchsuchen wird Grep folgendermaßen aufgerufen:

> > grep Ausdruck Datei(en)

> > Wenn die Angabe der Datei(en) weggelassen wird, so sucht grep den Ausdruck im Standard-Eingabe-Datenstrom. Wenn wir also z.B. die ProzeßID eines bestimmten Prozesses suchen, dann brauchen wir ja dazu das Programm ps uax. Das liefert uns aber ja alle Prozesse, nicht nur die gesuchten. Schicken wir aber die Ausgabe des ps-Kommandos zu grep und lassen dort nach dem gewünschten Prozessname suchen, so bekommen wir nur die Zeilen, in denen der Name vorkommt. Suchen wir doch mal nach dem Begriff lpd

> >     ps uax | grep lpd

> > Es werden jetzt nur die Zeilen der ps-Ausgabe angezeigt, die den Begriff lpd enthalten. Oder wir suchen nach einem bestimmten Usernamen

> >     ps uax | grep otto

> > Das hat jetzt einen kleinen Nachteil, weil wir neben all den Ausgaben der Prozesse von otto auch die Zeile mit dem Programmaufruf grep otto zu sehen bekommen. Kein Problem, wir können grep ja anweisen nach dem Begriff otto am Zeilenanfang zu suchen:

> >     ps uax | grep ^otto

> > Und schon haben wir nur noch die Zeilen, deren Zeilen mit otto beginnen.

> > [ Kurs Hauptseite ] [ Linux-Kurse ] [ Startseite Linux-Praxis ]

> > © 1999, 2000, 2001 by F. Kalhammer