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

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Debian leicht gemacht
(161 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.

Aufmacher Artikel

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

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

Tip a friend    Druckansicht Bookmark and Share
Kommentare

2494 Hits
Wertung: 128 Punkte (9 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

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

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

Owncloud mit Linuxmint 15 32 Bit
Santana Muggel, 24.04.2014 16:45, 0 Antworten
Hallo, ich habe nach dem Artikel in Heft 05.2014 versucht, owncloud einzurichten. Bei der Inst...
programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...