Reguläre Ausdrücke

Ein in der Informatik immer wiederkehrendes Hilfsmittel ist das Suchen ( greppen ) bestimmter Datensätze aus Dateien oder Verzeichnissen.
Hierzu schaffen die regulären Ausdrücke Abhilfe. Für eine bessere Übersicht können mit Hilfe dieser vom Anwender ganz gezielte Daten gefiltert werden. Hierzu ein kleines Beispiel.

Es liegt ein Datei „person.txt“ vor. Der Inhalt der Textdatei besteht aus einer Nummerierung, ein Name sowie Vorname, die Postleitzahl dieser Person sowie dem dazugehörigen Ort.

Nr:Name:Vorname:PLZ:Ort
1:Meier:Joachim:44797:Bochum
2:Michel:Simon:59929:Brilon
3:Schulte:Stefan:01067:Dresden
4:Schmidt:Moritz:20095:Hamburg
4:Meier:Frank:20095:Hamburg
5:Hammer:Erna:44797:Bochum-Stiepel

Für eine Suche nach bestimmten Kriterien wird ein Terminal und die Funktion „grep“ benötigt.

1. Wer wohnt in Bochum?

grep "Bochum" person.txt

Als Ergebnis werden alle Personen ausgegeben die in Bochum, oder in Stadtteilen von Bochum wohnen:

1.Meier:Joachim:44797:Bochum
5.Hammer:Erna:44797:Bochum-Stiepel

2. Wer wohnt direkt in Bochum?

grep ":Bochum$" person.txt

Das Dollarzeichen gibt das Zeilenende an. Der Doppelpunkt macht in diesem Kontext Sinn, da unmittelbar nach der Postleitzahl der Name der Stadt folgt. Würde dieser nicht angegeben werden, würden ggf. auch Personen mit ausgegeben werden, welche „Dortmund-Bochum“ als Ort hinterlegt haben.

[ad#co-3]

Die Ausgabe gibt wie erwartet folgende:

1.Meier:Joachim:44797:Bochum

3. Ausgabe der ersten Person

grep "^1:" person.txt

Als Ergebnis erhalten wir Joachim Meier:

1:Meier:Joachim:44797:Bochum

4. Gibt es den Vornamen Simon?

grep ":Simon:[0-9]" person.txt

„[0-9]“ schränkt die Suche insoweit ein, das nach dem letzten Doppelpunkt eine Zahl ( hier eine Postleitzahl ) erwartet wird.
Ergebnis:

2:Michel:Simon:59929:Brilon

[ad#co-3]

5. Gibt es eine Person mit dem Nachnamen Michel?

grep "[0-9]:Michel:[^0-9]" person.txt

Die erste Einschränkung beträgt die „[0-9]“. Hiermit sagen wir der Suche, das vor unserem Suchbegriff „Michel“ eine Zahl zwischen 0 und 9 steht. Das „^“ bewirkt das Gegenteil. Hinter dem Doppelpunkt wird demnach keine Ziffer erwartet.
Alternativ kann das greppen auch wie folgt ausgeführt werden:

grep "[0-9]:Michel:[a-z A-Z]" person.txt

Mit „[a-z A-Z]“ wird ein Klein- oder Großbuchstabe zwischen a-z erwartet.
Eine dritte Möglichkeit wäre folgende:

grep "[^0-9]*:Michel:[a-z A-Z]" person.txt

6. Nun werden alle Zeilen mit exakt 10 Zeichen gesucht:

grep "^..........$" person.txt

Der „.“ ist eine Wildcard. Er steht für genau ein! beliebiges Zeichen. Als Ergebnis wird keine Person ausgegeben.

7. Gesucht werden alle Zeilen mit mindestens 10 Zeichen

grep "^..........*$" person.txt

oder

grep ".........." person.txt

oder

egrep ".{10}" person.txt

Im ersten Fall wird vom Anfang der Zeile ( ^ ) bis zum Ende der Zeile ( $ ) nach mindestens ( * ) zehn beliebigen Zeichen gesucht. Im zweiten Fall geschieht ähnliches, nur ohne Einschränkung vom Zeilenanfang bzw. Ende. Das „egrep“ ist eine weitere Möglichkeit die kurz angesprochen werden sollte, aber nicht ins Detail betrachtet wird.

Es wurde anhand des vorliegenden Beispieles gezeigt, wie mit Hilfe von „grep“ bestimmte Filter für die Suche gesetzt werden können. Wie in den meisten Fällen, gibt es auch bei grep noch weitere Filteroptionen. Für die Interessierten User noch ein Link in das Ubuntuforum zum weiter lesen.