Zeichenklassen

Als erste Metazeichen untersuchen wir die eckigen Klammern: [...]. Innerhalb dieser Klammern können Sie eine Gruppe von Zeichen spezifizieren, die alle vorkommen dürfen. Nehmen Sie einmal an, Sie wollten die Städte Hamburg und Harburg finden, deren Namen recht ähnlich klingen. Mit der simplen Suchfunktion eines Editors müssten Sie die Suche zweimal vornehmen, einmal nach Hamburg und einmal nach Harburg. Mit egrep verwenden Sie stattdessen einfach den Regex Ha[mr]burg verwenden:

$ egrep -i 'Ha[mr]burg' stadtliste.txt
Hamburg
Harburg

Ausformuliert bedeutet dieser Regex: Die Zeichen H, a, gefolgt von einem m oder r, gefolgt von b, u, r, g. Wollem Sie nun auch noch Bad Homburg suchen, müssen Sie den Ausdruck etwas erweitern zu: H[ao][mr]burg. Dieser Regex würde zusätzlich einen weiteren Ort finden, wenn er in der Liste existierte. Erraten Sie, welchen? Kleiner Tipp: Er liegt in Niedersachsen.

Statt einzelner erlaubter Zeichen können Sie mit dem Minuszeichen (-) auch einen Zeichenbereich angeben. Dies stellt insbesondere dann eine Erleichterung dar, wenn aufeinander folgende Zeichen wie A-Z oder 0-9 gemeint sind. Stellen Sie sich vor, Sie müssten [ABCDEF...Z] tippen! [A-Z] sieht doch wesentlich entspannter aus.

Als Beispiel können Sie eine HTML-Datei betrachten, in der Sie nach allen Header-Tags suchen wollen (also <H1>, <H2>, <H3>, <H4>). Der Regex dazu lautet: H[1-4]. Das ist gleichbedeutend mit, aber wesentlich kürzer als H[1234].

Zeilenanfang und Zeilenende

Als nächstes wollen wir alle Städte auflisten, die den Titel "Bad" führen dürfen. Bei der Eingabe des naheliegenden Befehls erhalten wir aber:

<B>$ egrep -i 'Bad' stadtliste.txt<B>
Bad Homburg
Bad Nauheim
Friedrichsbad
Baden-Baden

Obwohl Friedrichsbad bestimmt wunderschön ist (falls es überhaupt existiert), erfüllt es doch nicht unsere strengen Bedingungen. Das Problem lässt sich auf zwei Arten lösen: Erstens könnten Sie auf den Schalter -i verzichten, dann würde Egrep explizit nach einem großen 'B' suchen. In dem Fall hätten Sie das Problem dann aber nicht mit einem Regex gelöst, sondern mit den Bordmitteln von egrep.

Zweitens könnten Sie angeben, dass das 'B' unmittelbar am Anfang der Zeile stehen muss. Damit würde Friedrichsbad nicht mehr angezeigt werden. Das hierfür verwendete Metazeichen ist das Hochzeichen ^. Der korrekte Regex für diese Aufgabe lautet demnach ^Bad.

Ein Versuch zeigt, dass bei einem Aufruf mit diesem Regex Friedrichsbad zwar aus der Ausgabe verschwindet, Baden-Baden aber noch immer erscheint. Der Reguläre Ausdruck arbeitet also noch nicht ausreichend präzise. Das Merkmal, das "Bad XXX" deutlich von "Baden-Baden" unterscheidet, ist das auf das d folgende Leerzeichen. Praktischerweise handelt es sich beim Leerzeichen ebenfalls um ein ganz normales Zeichen, das in einem Regex vorkommen darf. Erweitern Sie den Regulären Ausdruck also zu '^Bad ' (nun mit Leerzeichen hinter dem d), geht nichts mehr schief:

<B>$ egrep -i '^Bad ' stadtliste.txt<B>
Bad Homburg
Bad Nauheim

Auf ähnlichem Weg können Sie auch das Zeilenende näher spezifizieren. Möchten Sie also erreichen, dass Hamburg, nicht aber Burgwedel angezeigt wird, formulieren Sie: burg$. Das bedeutet soviel wie: Auf die Zeichen B, u, r, g muss das Zeilenende folgen.

LinuxCommunity kaufen

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

Deutschland

Ähnliche Artikel

  • Einfaches Erstellen von regulären Ausdrücken
    Wo reguläre Ausdrücke für den Profi ein Denksport sind, steht der Anfänger verzweifelt vor einem Dickicht an Kürzeln und Zeichen. Für den Durchblick sorgt der Editor txt2regex.
  • 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.
  • Schnipseljagd
    Computer erleichtern die Arbeit – sofern man ihnen genau sagt, was sie tun sollen. Mit regulären Ausdrücken beschleunigen Sie das Suchen und Ersetzen von Zeichenketten auf elegante Art.
  • 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.
  • Reguläre Ausdrücke
    Regulären Ausdrücken begegnet man auf Unix-Systemen an allen Ecken und Enden. Doch was genau hat es damit auf sich, und wie nutzt man sie?
Kommentare

Infos zur Publikation

LU 09/2016: Ciao, Windows!

Digitale Ausgabe: Preis € 5,99
(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!

Aktuelle Fragen

NOKIA N900 einziges Linux-Smartphone? Kein Support mehr
Wimpy *, 28.08.2016 11:09, 1 Antworten
Ich habe seit vielen Jahren ein Nokia N900 mit Maemo-Linux. Es funktioniert einwandfrei, aber ich...
Scannen nicht möglich
Werner Hahn, 19.08.2016 22:33, 3 Antworten
Laptop DELL Latitude E6510 mit Ubuntu 16,04, Canon Pixma MG5450. Das Drucken funktioniert, Scann...
Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...