Reguläre Ausdrücke

Nadel im Heuhaufen

Regulären Ausdrücken begegnet man auf Unix-Systemen an allen Ecken und Enden. Doch was genau hat es damit auf sich, und wie nutzt man sie?

Reguläre Ausdrücke oder Regular Expressions sind kurz gesagt nichts weiter als Platzhalter für bestimmte Zeichenfolgen. Zum Einsatz kommen Regexps, wie man sie liebevoll abkürzt, bei Suchvorgängen unterschiedlichster Art, zum Beispiel in Texteditoren oder einer der zahlreichen Unix-Skriptsprachen.

Unzählige Sonderfunktionen und Specials machen reguläre Ausdrücke zu einer etwas unangenehmen und trockenen Materie. Wenn Sie sich das erste Mal durch die Grundlagen kämpfen, haben Sie mein aufrichtiges Mitgefühl. Aber glauben Sie mir, es lohnt sich!

Wo man auf Regexps trifft

Wer häufig auf der Kommandozeile arbeitet, nutzt grep für die Suche in Dateien. Dieses Tool verdankt regulären Ausdrücken sogar seinen Namen: Der ed-Befehl g/re/p druckt alle Zeilen einer Datei aus, die den regulären Ausdruck re enthalten – und das ist genau das Funktionsmuster von grep.

grep benötigt als Kommandozeilenargument zumindest den Suchausdruck. Die Datei(en), in der oder in denen gesucht werden soll, geben Sie als zusätzliche Argumente mit an. Sie wollen alle Nutzer Ihres Systems auflisten, deren Username mit dem Buchstaben t beginnt und die bash als Login-Shell nutzen?

grep -i ^t.*bash /etc/passwd

holt sie auf den Bildschirm.

Fehlen Dateinamen in der grep-Kommandozeile, so sucht das Tool in der Standardeingabe. Das ist ganz praktisch, wenn Sie die Ausgabe eines anderen Programms bearbeiten wollen. Wenn ich zum Beispiel auf der Suche nach Konqueror-Prozessen des Users mas bin, könnte ich folgenden Befehl verwenden:

ps -auwx | grep mas.*konqueror

Tabelle 1: Nützliche Optionen für <C>grep<C>

Befehl Bedeutung
-i Groß- und Kleinschreibung ignorieren
-l Nur die Dateinamen anzeigen, in denen der Ausdruck gefunden wird, nicht die zugehörigen Textzeilen
-v Suche umkehren: Nur die Textzeilen anzeigen, die den Suchausdruck nicht enthalten
-3 Nicht nur die Textzeile(n) mit dem Suchausdruck anzeigen, sondern zusätzlich noch je drei Zeilen davor und danach
-A 3 Nach der Zeile mit dem Suchausdruck werden zusätzlich noch die drei folgenden Zeilen angezeigt
-B 3 Vor der Zeile mit dem Suchausdruck werden zusätzlich die drei vorhergehenden Zeilen angezeigt

Die Suchfunktionen / (vorwärts) und ? (rückwärts) im Texteditor vi berücksichtigen immer reguläre Ausdrücke. In emacs mit seiner inkrementellen Suche würde das eher Verwirrung schaffen. Dort fahnden Sie erst auf ausdrücklichen Wunsch nach einer Regexp. Der Befehl für die gewohnte inkrementelle Suche heißt M-C-s, also [Strg-Alt-S]. Etwas geradliniger funktioniert M-x [Alt-X] search-forward-regexp: Dabei geben Sie den Suchausdruck erst einmal komplett ein und suchen anschließend.

Viele Leute lernen Regexps über perl kennen, doch auch die meisten anderen Skriptsprachen (darunter Tcl, Python und PHP) verstehen sie. Weniger bekannte (und trotzdem leistungsstarke) Regexp-Nutzer sind kleine Sprachen wie sed oder awk. Aber auch das C++-GUI-Toolkit Qt, das u. a. zum Schreiben von KDE-Programmen benutzt wird, kennt reguläre Ausdrücke.

Grundbausteine

Bei einfachen regulären Ausdrücken schreiben Sie im Prinzip ganz simpel hin, was Sie suchen möchten. Die meisten ASCII-Zeichen dürfen direkt benutzt werden: Auch ein einzelner Buchstabe ist bereits ein – wenn auch primitiver – Suchausdruck.

Die nächste Lektion lautet: Bestimmte Sonderzeichen aktivieren Sonderfunktionen. Das am meisten genutzte ist der Punkt: Er steht für ein beliebiges Zeichen. Die Regexp Hu.. sucht nach Hu, gefolgt von zwei beliebigen anderen Zeichen. Sie passt also gleichermaßen auf "Huhn" und "Hund", auch auf "Hut " (mit einem Leerzeichen danach), nicht aber auf einen einsamen "Hut" ohne ein nachfolgendes Zeichen.

Der Caret ^ sucht nach einem Zeilenanfang. Man nennt dies einen Anker: Es verankert den Suchausdruck am Anfang einer Zeile. Mit ^Huhn fahndet man nach einem Huhn am Zeilenbeginn.

Ganz analog steht das Dollarzeichen $ für ein Zeilenende. Der letzte Hund einer Zeile wäre also Hund$.

Weil ein regulärer Ausdruck normalerweise Zeile für Zeile überprüft wird, ergeben zusätzliche Zeichen vor dem ^ oder nach dem $ in der Regel keinen Sinn. Sprachen wie Perl erlauben da manchmal Ausnahmen – das sehen wir uns später noch an.

Den eigentlichen Reiz machen jedoch erst Kombinationen aus! ^Eins$ passt auf alle Zeilen, die genau das Wort "Eins" enthalten und sonst nichts. Eine leere Zeile finden Sie dementsprechend mit ^$: Gleich hinter dem Zeilenbeginn steht schon das Zeilenende, dazwischen befinden sich keinerlei Zeichen.

Achtung: Konstrukte wie ^ und $ repräsentieren in der durchsuchten Datei kein Zeichen, sondern sozusagen die Stelle zwischen zwei Zeichen.

grep ^a$ textdatei

beispielsweise gibt für jeden Treffer genau zwei Zeichen aus, ein "a" und einen Zeilenumbruch, obwohl der reguläre Ausdruck drei Stellen lang ist.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Praktisch und nützlich: AWK
    Ein Unix-Rechner erschlägt den Anwender förmlich mit kleinen Helferlein, die ihm so gerne zu Diensten wären. Leider lassen sie sich nicht immer ganz problemlos bedienen. Die Textbearbeitungssprache AWK ist ein typisches Beispiel.
  • Zu Befehl: Suchen mit grep, egrep, fgrep, (b)zgrep
    Für die Suche nach Wörtern und Ausdrücken in Textdateien bieten sich die Kommandos der grep-Familie an. Als Ergebnis zeigen sie wahlweise die gefundenen Zeilen, die Namen der Dateien, in denen das Suchmuster vorkommt, oder die Anzahl der Treffer an.
  • The Answer Girl
    Dass der Computeralltag auch unter Linux immer wieder für Überraschungen gut ist, ist eher eine Binsenweisheit: Immer wieder funktionieren Dinge nicht oder nicht so, wie eigentlich angenommen. Das Answer-Girl im Linux-Magazin zeigt, wie man mit solchen Problemchen elegant fertig wird.
  • Erste Schritte mit Regular Expressions
    Computer erleichtern die Arbeit – man muss ihnen nur genau sagen, was sie tun sollen. Mit regulären Ausdrücken beschleunigen Sie das Suchen und Ersetzen von Zeichenketten auf elegante Art.
  • Schnipseljagd
    Computer erleichtern die Arbeit – sofern man ihnen genau sagt, was sie tun sollen. Mit regulären Ausdrücken beschleunigen Sie das Suchen und Ersetzen von Zeichenketten auf elegante Art.
Kommentare

Infos zur Publikation

LU 09/2016: Ciao, Windows!

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Scannen nicht möglich
Werner Hahn, 19.08.2016 22:33, 3 Antworten
Laptop DELL Latitude E6510 mit Ubuntu 16,04, Canon Pixma MG5450. Das Drucken funktioniert, Scann...
Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...
Mit Firewire Videos improtieren?
Werner Hahn, 09.06.2016 11:06, 5 Antworten
Ich besitze den Camcorder Panasonic NV-GS330, bei dem die Videos in guter Qualität nur über den 4...