Home / LinuxUser / 2005 / 08 / Suchen und Finden mit Regulären Ausdrücken

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(220 Punkte bei 8 Stimmen)
KDE 4.10.2, Gnome 3.6 und mehr
(121 Punkte bei 4 Stimmen)
Google schmeißt Jabber raus ...
(121 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Strukturierte Suche

Suchen und Finden mit Regulären Ausdrücken

Die Alternation

Als Beispiel für die Alternation, die nicht mehr auf einzelnen Zeichen oder einem Zeichenbereich basiert, sondern feste Zeichenketten beliebiger Länge unterscheidet, sollen uns die beiden Orte Idstedt (in Schleswig-Holstein) und Idstein (in Hessen) dienen. Mittels einer Zeichenklasse können Sie zwar einenentsprechendenn Regex formulieren, der bei beiden Städten einen Treffer erzeugt: Idste[id][nt]. Doch gibt es hier ein Problem: Idste[id][nt] findet auch "Idstedn" und "Idsteit". Dies ist bei der Alternation ausgeschlossen:

$ egrep -i 'Idste(in|dt)' stadtliste.txt
Idstedt
Idstein

Unser Regex lauten also in diesem Fall: I, d, s, t, e, gefolgt entweder von der Zeichenkette in oder (|) der Zeichenkette dt.

Im echten Leben

Die bisherigen Beispiele fielen zwar etwas trivial aus, eignen sich jedoch doch zur Bewältigung einiger Herausforderungen des Alltagslebens. Vor allem haben Sie diese Fingerübungen mit den grundlegenden Metazeichen vertraut gemacht, so dass Sie nun Ihre Experimente mit Regulären Ausdrücken vertiefen können. Als erstes komplexeres Beispiel soll uns das Durchsuchen von Mailboxdateien dienen. Vielleicht möchten Sie von einer sehr umfangreichen Mailboxdatei eine Zusammenfassung erstellen, in der nur Absender und Betreffzeile der Nachrichten angezeigt werden. Dies erreichen Sie mit:

$ egrep -i '^(From|Subject): ' <I>Mailbox↩
datei<I>

Angezeigt werden soll jede Zeile, die folgendermaßen aufgebaut ist: Zeilenanfang (^) gefolgt von den Zeichenketten From oder Subject, gefolgt von den Zeichen : und . Hätten Sie nur (From|Subject) verwendet, würden auch Zeilen gefunden werden, in denen etwa "le fromage" (franz. "Käse") vorkommt.

Schon etwas komplexer fällt das Zusammenspiel von Regular Expressions mit procmail aus. Das Programm dient zur Bearbeitung von E-Mail und ist unglaublich flexibel: Man kann automatische Antworten erstellen, E-Mail in bestimmte Ordner sortieren und viele andere Dinge mehr, die mit kaum einem normalen E-Mail-Programm möglich sind. procmail greift ebenfalls auf Regexe zurück.

Einen Auszug aus einer typischen procmail-Konfigurationsdatei finden Sie im unten stehenden Listing. Hier kommt ein weiteres Metazeichen zum Einsatz, der Stern *. Er bezieht sich immer auf das Zeichen, auf das er folgt, und bedeutet: Beliebig oft (auch null Mal). Der Ausdruck .* steht also für irgendein Zeichen (.) und zwar beliebig oft (*).

:0
* ^List-Id.*gnome-bugsquad.gnome.org
in-ML-GNOME-dev-bugs/
:0
* ^List-Id.*b-greek
in-ML-Altgriechisch/

Die Zeichenfolge :0 leitet für procmail eine neue Vorschrift ein. Auf das * folgt nun ein regulärer Ausdruck. procmail durchsucht nun jede E-Mail nach diesem Ausdruck. Erzeugt dieser einen Treffer, wird die E-Mail in den entsprechenden Ordner verschoben, der in der Zeile darunter steht. Die erste Vorschrift dient der Behandlung von Mails der Gnome-Bugsquad-Mailingliste. Jede E-Mail, die über diese Liste verschickt wird, enthält die folgende Zeile:

List-Id: List to discuss bug maintenance ↩
in GNOME <gnome-bugsquad.gnome.org>

Auf diese Zeile passt der erster Regex: ^List-Id.*gnome-bugsquad.gnome.org: Zeilenanfang ^, gefolgt von der Zeichenkette List-Id, gefolgt von einem beliebigen Zeichen . und zwar beliebig oft *, gefolgt von gnome-bugsquad.gnome.org. Entsprechende E-Mails verschiebt procmail in den Ordner in-ML-GNOME-dev-bugs/.

In diesem Zusammenhang spielt der Stern eine wichtige Rolle. Für die Auswertung ist zunächst nur von Bedeutung, dass die Zeile mit der Zeichenkette List-Id einsetzt. Dies signalisiert, dass es sich um eine E-Mail aus einer Mailingliste handelt. Alles folgende interessiert überhaupt nicht und kann mittels .* ignoriert werden. Erst der eindeutige Name gnome-bugsquad.gnome.org ist wieder wichtig, denn er zeigt, um welche Mailingliste es sich handelt.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 128 Punkte (9 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 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 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Emacs als Psychologe
Emacs als Psychologe
Tim Schürmann, 21.05.2013 11:49, 0 Kommentare

Wer beim Schreiben in Emacs nicht mehr weiter weiß oder schier an einer Programmieraufgabe verzweifelt, der kann den eingebauten Psychologen um Rat fragen.

1966 entwickelte der Infor...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...