Home / LinuxUser / 2002 / 08 / Reguläre Ausdrücke

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(243 Punkte bei 15 Stimmen)
Re: War doch klar...
(179 Punkte bei 5 Stimmen)
Re: Skype für 64-Bit-Prozessor u. Suse 12.1
(161 Punkte bei 4 Stimmen)
Kubuntu verliert Finanzierung
(130 Punkte bei 4 Stimmen)
Offen fürs Geschäft
(80 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Nadel im Heuhaufen

Reguläre Ausdrücke

01.08.2002 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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

873 Hits
Wertung: 69 Punkte (1 Stimme)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 03/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

Ubuntu 11.10 Compiz 3D Cube flackern
Moritz Obenauer, 12.02.2012 12:25, 0 Antworten
Hallo! Ich habe Ubuntu 11.10 mit Unity und den Compiz 3D Cube ein gerichtet. Er funktioniert...
Suse 12.1 Bootvorgang bleibt seit Update stehen
Wimpy *, 12.02.2012 09:22, 2 Antworten
Seit Update auf Kernel 3.1.9-1.4-desktop i686 bleibt der Bootvorgang stehen. Es erscheint der gr...
N24 Stick (Huawei E173) und Ubuntu 11.04
Patrick Obenauer, 11.02.2012 11:54, 1 Antworten
Hallo zusammen! Ich benutze einen alten Laptop, der mit Ubuntu 11.04 flott und problemlos läuft....
Wie kann man beim Einsatz von Compiz die Fenster-Dekoration einstellen?
GoaSkin , 10.02.2012 20:12, 0 Antworten
Hallo, ich nutze Linux Mint mit dem Gnome-Derivat Mate. Da die Distribution Compiz nicht autom...
rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...