Reguläre Ausdrücke

Block 6

Reguläre Ausdrücke beschreiben die Struktur einer Zeichenfolge und können sehr hilfreich sein.

^[0-9]{4} [A-Za-z. -]*$

Der Ausdruck ist ein Beispiel für einen Regulären Ausdruck, der noch einer Zeile mit Postleitzahl und Ortsname sucht. Im Folgenden wollen wir diesen genauer anschauen.

Die wichtigsten Symbole

.ein beliebiges Zeichen
*beliebig oft wiederholt (das Zeichen direkt davor)
{n,m}mindestens n maximal m mal wiederholt
^der Beginn einer Zeile
$das Ende einer Zeile
[abc]einer der Buchstaben zwischen [ und ]
A-Z, a-z, 0-9alle Grossbuchstaben, Kleinbuchstaben, Ziffern
(x|y)x oder y
\markiert, dass das folgende Zeichen als Zeichen und nicht als Symbol gemeint ist.

Mit Hilfe der Tabelle kannst du den RegExp nun aufschlüsseln.

Du siehst, RegExp sehen komplizierter aus als sie sind. Wenn du mehr wissen möchtest, findest du im Internet diverse Anleitungen zu Regulären Ausdrücken. Wo aber kannst du Reguläre Ausdrücke verwenden?

Für die Beispiele kannst du deine eigenen Dateien aus der Unix-Einführung verwenden, oder besser die Beispiel-Datei herunterladen. In der Beispiel-Datei haben die Befehle sicher alle einen Effekt.

Reguläre Ausdrücke verwenden

Viele der Unix-Tools verstehen reguläre Ausdrück. So kannst du zum Beispiel in den meisten Suchfeldern von KDE RegExp verwenden. Insbesondere unterstützt die Suche von Kate Reguläre Ausdrücke. Im folgenden zwei weitere Tools bei denen Reguläre Ausdrücke besonders nützlich sind.

grep

Auch grep versteht Reguläre Ausdrücke, allerdings musst du dafür die Option -E verwenden. egrep ist ein Alias für diese Option. Ausserdem musst du den RegExp in Anführungs- und Schlusszeichen setzen, damit die Shell alle Zeichen richtig interpretiert.

grep -E 'g.' fruechte.txt grep -E '^pf.' fruechte.txt grep -E '.*e$' fruechte.txt grep -E '(an){2}' fruechte.txt

Bei pdfgrep kannst du ohne zusätzliche Option RegExp verwenden.

sed

Sed ist ein Stream EDitor. Im Gegensatz zu einem normalen Editor, kannst du in sed eine Datei nicht öffnen um sie anschliessend zu bearbeiten. Du musst sed deine Anweisungen geben, bevor du deinen Befehl abschickst. sed geht dann Zeile für Zeile durch die Datei und führt deinen Befehl aus. Das Resultat wird auf der Standard-Ausgabe ausgegeben. Um das zu Speichern, musst du diese in eine Datei umleiten.

Das folgende Beispiel ersetzt in deiner Datei jedes Auftreten von an durch na.

sed 's/an/na/g' fruechte.txt

Das s zu Beginn des Befehls bedeutet, dass nun ein Ersetz-Befehl folgt (s von Suchen und Ersetzen). Das g am Ende verlangt "global", so dass nicht bloss der erste Treffer einer Zeile angepasst wird. Passe den Befehl an und schaue was du alles erreichen kannst. Kannst du mit eine Zeile löschen? (Ersetze sie mit nichts)

Wenn du in sed komplexere Ausdrücke verwenden möchtest, musst du die Option -r verwenden.

sed -r 's/(an){1,}//g' fruechte.txt

Schliesslich noch ein sehr nützlicher Link für sed-Benutzer. sed1line ist eine grosse Sammlung von hilfreichen sed-Befehlen.