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!"
(195 Punkte bei 6 Stimmen)
Bezahlstandard
(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

01.08.2005 Zum wichtigsten Handwerkszeug bei der Suche in Texten und auf der Festplatte zählen Regular Expressions. Trotz ihrer scheinbar komplexen Struktur lassen sie sich schnell meistern.

Das Suchen von Dateien oder bestimmten Inhalten innerhalb von Dateien ist ein immer wiederkehrendes Vergnügen für jeden, der sich mit Datenverarbeitung im weitesten Sinne beschäftigt. Wie in nahezu allen Bereichen hält die Unix-Welt auch auf diesem Gebiet verschiedene Herausforderungen bereit, denen man sich stellen kann. Meisterschaft auf dem Gebiet der Datensuche hat erreicht, wer die so genannten "Regulären Ausdrücke", oder Regex oder RE (von engl. "regular expressions") beherrscht. Über die korrekte deutsche Pluralbildung von Regex gibt es unter den Benutzern Unstimmigkeiten. Im Deutschen hat sich der Ausdruck "Regexe" weitgehend eingebürgert, den wir auch im Folgenden verwenden.

Viele Programme in der Unix-Welt (aber auch darüber hinaus) ermöglichen die Verwendung von Regexen. Einige prominente Vertreter sind Sed, Awk, Mutt, Vi, Procmail, Emacs und diverse Shells. In der Gruppe der Programmiersprachen hat vor allem Perl auf dem Gebiet der Regexe Zeichen und Standards gesetzt. Mittlerweile gibt es aber Regex-Unterstützung auch für Python, Java, .NET und C.

Reguläre Ausdrücke wirken ein bisschen wie Schweizer Taschenmesser: Auf den ersten Blick nicht sehr elegant und auch nicht schön anzusehen. Außerdem scheinen sie viele Funktionen zu bieten, von denen man sich kaum vorstellen kann, sie jemals gebrauchen zu können. Auf den zweiten Blick aber sind sie ungemein nützlich. Hat man sich erstmal an sie gewöhnt, fragt man sich immer wieder, wie man jemals ohne sie auskommen konnte.

Larry Wall, der Erfinder von Perl, hat einmal gesagt, ein guter Programmierer brauche nur drei Tugenden: Faulheit, Ungeduld und Selbstüberschätzung [1]. Wenn Sie diese drei Tugenden mitbringen, dann werden Sie sich schnell mit den Regulären Ausdrücken anfreunden. Auch wenn die Regexe auf den ersten Blick genauso trocken aussehen, wie ihr Name klingt: Nach nur einer kurzen Gewöhnungszeit bereiten Ihnen auch komplizierte Ausdrücke keine Probleme mehr.

Alte Bekannte

Wenn Sie sich alle Dateien eines Verzeichnisses auflisten wollen, die auf den Suffix .txt enden, dann verwenden Sie bereits wie selbstverständlich einen Regex, indem Sie ls -l *.txt eingeben. Das Sternchen (*) bedeutet in diesem Zusammenhang (stark vereinfacht): eine beliebige Anzahl beliebiger Zeichen. Es werden also alle Dateien aufgelistet, deren Name aus einer beliebigen Zahl beliebiger Zeichen, gefolgt von ., t, x, t besteht.

Machen wir uns noch klar, dass nicht nach dem eigentlich Zeichen * als Teil des Dateinamens gesucht wird. Das Zeichen * steht hier für etwas anderes (eine beliebige Anzahl beliebiger Zeichen), daher bezeichnen wir es als Metazeichen. Von den kaum zählbaren existierenden Metazeichen stellen wir Ihnen in diesem Artikel einige wenige, aber grundlegende vor.

Reguläre Ausdrücke bestehen also aus Zeichen, die tatsächlich Teil des Musters sind, das erkannt werden soll, und aus Metazeichen, die etwas beschreiben: zum Beispiel mehrere Zeichen, Zeichengruppen und so fort. In anderen Regex-Dialekten kann das Sternchen andere Bedeutungen annehmen, wie wir später sehen werden. Der geläufigste Regex-Dialekt, den wir uns im Folgenden näher ansehen, ist das so genannte "Perl-kompatible" Regex.

Einfache Mustererkennung mit Egrep

Das Suchen von Inhalten innerhalb von Dateien bildet das Metier des Programms egrep, das unter jeder Linux-Installation zur Verfügung stehen sollte. Die einfachste Anwendung ist die Suche nach bestimmten, klar definierten Mustern, das so genannte Pattern Matching. Nähere Informationen zu Egrep erhalten Sie durch die Eingabe von man egrep oder unter [2].

Nehmen wir an, wir verfügen über eine ausgesprochen umfangreiche Textdatei, die Kurzbeschreibungen verschiedener deutscher Städte beinhaltet, welche nicht alphabetisch sortiert sind. Als Beispiel dient uns die Aufstellung aus Listing 1. Um nachzusehen, ob die Liste auch die Stadt Hamburg umfasst, hilft die Eingabe von

egrep -i 'Hamburg' stadtliste.txt

weiter. Der Schalter -i ist ausgesprochen hilfreich, denn er veranlasst egrep, Groß- und Kleinschreibung zu ignorieren; den eigentlichen Reguläre Ausdruck (Hamburg) übergibt man in Hochkommata.

Listing 1

stadtliste.txt

Hamburg
Berlin
Frankfurt
München
Harburg
Bad Homburg
Bad Nauheim
Idstedt
Idstein
Friedrichsbad
Baden-Baden

Falls Ihnen das Verwenden der Kommandozeile größeres Unbehagen bereitet, können Sie selbstverständlich auch einen handelsüblichen Editor verwenden. Die Suchfunktion der KDE-Oberfläche beispielsweise unterstützt Regexe vorbehaltlos (Abbildung 1). egrep bietet aber immense Vorteile, unter anderem das Suchen in mehreren Verzeichnissen und Dateien.

Abbildung 1: Suchfunktion mit Regex-Unterstützung bei KDE.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

2056 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

Terminator
Viele Terminals im Griff mit Terminator
Tim Schürmann, 07.05.2013 10:57, 1 Kommentare

Wer morgens nach dem Einschalten des Rechners erst einmal mehrere Terminals öffnet und sich diese mühevoll auf dem Bildschirm drapiert, der sollte einen Blick auf Terminator werfen. Das kleine...

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