Unterschiede der Bibliotheken

Bereits mehrfach habe ich angedeutet, dass verschiedene Programme mit regulären Ausdrücken etwas unterschiedlich umgehen. Solange man sich nur mit einem einzigen Tool beschäftigt, etwa während der Programmierung eines Perl-Skripts, macht das keine Probleme. Beim raschen Wechsel oder der gleichzeitigen Benutzung mehrerer Werkzeuge kann es schon etwas Unmut stiften.

Die Differenzen betreffen vor allem zwei Punkte. Erstens: Erwartet das Programm einen "einfachen" oder einen "erweiterten" regulären Ausdruck? Dabei geht es vor allem darum, ob die ganzen Sonderfunktionen, z. B. das + oder die runden Klammern, erst durch einen vorangestellten Backslash \ eingeschaltet werden müssen oder ob sie schon aktiv sind (und durch einen Backslash ausgeschaltet würden).

Faustregel: Die meisten Skriptsprachen verwenden erweiterte reguläre Ausdrücke, Sie können die hier vorgestellten Funktionen also direkt einsetzen. Zu grep gibt es besagte Version namens egrep, die ebenfalls erweiterte Regexps versteht. Die meisten Editoren und Kommandozeilenbefehle hingegen erwarten einfache reguläre Ausdrücke; wenn dabei irgend etwas nicht funktioniert, ergänzen Sie Backslashes an den strategischen Punkten.

Zweitens und in der Praxis nicht ganz so problematisch: Ausgefeilte Details und raffinierte Spezialfunktionen sind meistens private Erweiterungen, die selbstredend in anderer Software nicht mehr zur Verfügung stehen. Perl beispielsweise erlaubt Ihnen das Unterbringen von Kommentaren in regulären Ausdrücken und kennt Spezialfunktionen für virtuelle Ausdrücke (das sind "vorausschauende" Ausdrücke, die prüfen, ob nach der eigentlichen Regexp ein bestimmter Text folgt oder nicht, ohne dass dieser Text jedoch zur Regexp gehören würde) – für grep ergäbe so etwas gar keinen Sinn.

Rückbesinnung innerhalb eines Ausdrucks

Runde Klammern umschließen – wie wir bereits festgestellt haben – eine Zeichengruppe. Diese Gruppen hatten wir bislang nur für das Wiederholen von Zeichenfolgen eingesetzt.

Die wahre Aufgabe solcherlei Gruppierung liegt jedoch woanders: Eine Gruppe definiert einen Teil-String, auf den man später Bezug nehmen kann. Sobald die Software also einen Ausdruck innerhalb von runden Klammern findet, merkt sie ihn sich. An einer anderen Stelle können Sie diesen String wieder verlangen.

Ein Beispiel: Die Regexp (BusBahn) passt wahlweise auf einen Bus oder eine Bahn. Weil sie in runden Klammern steht, merkt sich die Software, was davon gefunden wurde – "Bus" oder "Bahn". Die Zeichenfolge wird in einer Variablen abgespeichert, wobei die hierfür benutzten Variablen der Einfachheit halber von eins bis neun durchnummeriert werden. Variable eins enthält den Inhalt der ersten Gruppe, Variable zwei den der zweiten Gruppe usw.

Mit dem Konstrukt \1 ff. beziehen Sie sich anschließend auf diese Variablen. Nehmen wir die Datei Verbindungen.txt aus Listing 1 zur Hilfe, die die Verbindungen von Vilsbiburg über Landshut nach München enthält.

Listing 1

Beispieldatei Verbindungen.txt

VIB     mit   nach LA   mit   nach M
10:45   Bus   11:52     Bahn  13:05
10:49   Bahn  11:19     Bahn  12:05
11:45   Bus   12:54     Bus   15:10
12:45   Bus   13:51     Bahn  15:05
13:49   Bahn  14:19     Bahn  15:05

Nun laufe ich beim Umsteigen nicht gerne vom Busbahnhof zum Hauptbahnhof. Ich möchte also nur diejenigen Verbindungen angezeigt bekommen, bei denen ich entweder nur mit dem Bus oder nur mit der Bahn fahre. Dafür verwende ich folgenden Befehl:

egrep '(Bus|Bahn).*\1' Verbindungen.txt

Die Regexp sucht zunächst nach "Bus" oder "Bahn" und speichert den gefundenen Text in der Variablen eins ab. Danach muss eine beliebige Zeichenfolge stehen (".*") und anschließend noch einmal der Inhalt der Variablen \1. Wurde zunächst also "Bus" gefunden, muss die Zeile später nochmal "Bus" enthalten, bei "Bahn" muss ein zweites Mal "Bahn" vorkommen.

Ausgegeben werden demnach die folgenden Zeilen:

10:49   Bahn  11:19     Bahn  12:05
11:45   Bus   12:54     Bus   15:10
13:49   Bahn  14:19     Bahn  15:05

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Praktisch und nützlich: AWK
    Ein Unix-Rechner erschlägt den Anwender förmlich mit kleinen Helferlein, die ihm so gerne zu Diensten wären. Leider lassen sie sich nicht immer ganz problemlos bedienen. Die Textbearbeitungssprache AWK ist ein typisches Beispiel.
  • Zu Befehl: Suchen mit grep, egrep, fgrep, (b)zgrep
    Für die Suche nach Wörtern und Ausdrücken in Textdateien bieten sich die Kommandos der grep-Familie an. Als Ergebnis zeigen sie wahlweise die gefundenen Zeilen, die Namen der Dateien, in denen das Suchmuster vorkommt, oder die Anzahl der Treffer an.
  • The Answer Girl
    Dass der Computeralltag auch unter Linux immer wieder für Überraschungen gut ist, ist eher eine Binsenweisheit: Immer wieder funktionieren Dinge nicht oder nicht so, wie eigentlich angenommen. Das Answer-Girl im Linux-Magazin zeigt, wie man mit solchen Problemchen elegant fertig wird.
  • Gut gefiltert
    Zu den häufigsten Aufgaben bei der Arbeit am Rechner zählt das Durchstöbern von Texten nach Suchmustern. Icgrep bietet hier eine moderne, parallel arbeitende und Unicode-fähige Alternative zum klassischen Grep.
  • Erste Schritte mit Regular Expressions
    Computer erleichtern die Arbeit – man muss ihnen nur genau sagen, was sie tun sollen. Mit regulären Ausdrücken beschleunigen Sie das Suchen und Ersetzen von Zeichenketten auf elegante Art.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Huawei
Pit Hampelmann, 13.12.2017 11:35, 2 Antworten
Welches Smartphone ist für euch momentan das beste? Sehe ja die Huawei gerade ganz weit vorne. Bi...
Fernstudium Informatik
Joe Cole, 12.12.2017 10:36, 2 Antworten
Hallo! habe früher als ich 13 Jahre angefangen mit HTML und später Java zu programmieren. Weit...
Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 3 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...