Gruppen

Bevor sich dieser Artikel der Praxis zuwendet, noch ein letztes wichtiges Konstrukt. Wiederholungszeichen wie * gelten immer nur für das Zeichen bzw. genauer für den Ausdruck, der unmittelbar vor ihnen steht. In abc* wird nur das "c" wiederholt, diese Regexp passt also auf "abcc", aber nicht auf "abcabc".

Durch runde Klammern umschließen Sie eine Regexp zu einer Gruppe. (abc) bedeutet effektiv das gleiche wie abc, aber intern funktioniert die Suche ganz anders: abc enthält die drei Suchausdrücke "a", "b" und "c", die nacheinander gefunden werden müssen. (abc) enthält als einzelnen Suchausdruck die Gruppe "abc". Auf diese können Sie nun weitere Funktionen anwenden: (abc)* wiederholt die gesamte Gruppe. Dieser Ausdruck findet "abcabcabc" ebenso wie "abc" oder den leeren String, aber nicht mehr "abcc".

Die Shell frisst aus der Hand

Ein ganz wichtiger Grund, warum reguläre Ausdrücke so beliebt sind, ist die hoffnungslose Verwirrung, in die man beim Umgang mit ihnen immer wieder stürzt. Reguläre Ausdrücke sind ja soooo schön unleserlich, wenn sie kompliziert werden. Hier ein kleines Beispiel aus der perlfaq6-Manpage:

/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|\n+|.[^/"'\\]*)

Dieses Ungetüm soll Kommentare in einem C-Programm finden, dabei jedoch scheinbare Kommentarzeichen in Strings ignorieren. Nein, ich habe es nicht ausprobiert, und nein, auch Profis können sowas nicht mehr "lesen", höchstens mühsam auseinanderklamüsern.

Richtig fies wird es durch allerlei Komplikationen. Reguläre Ausdrücke verwendet man in tausend verschiedenen Programmen, und natürlich hat jedes davon seine eigene Implementation mit eigenen Features und eigenen Ausnahmeregelungen.

Die erste Falle, in die man meistens tappt, sind die Backslashes, vor allem in Kombination mit den runden Klammern für die Gruppendefinition. Wir hatten festgestellt: (abc)+ sucht Wiederholungen der Zeichenfolge "abc", z. B. auch "abcabc" oder "abcabcabc". Leider müssen Sonderzeichen wie die runden Klammern oder das Plus oft erst durch einen Backslash aktiviert werden. Wenn Sie mit Perl arbeiten, heißt die Regexp korrekt (abc)+. In grep hingegen muss sie \(abc\)\+ lauten. egrep oder grep -E sucht nach "Extended Regular Expressions" und versteht (abc)+ direkt.

Backslashes mag die Shell auch sehr gerne, sogar zum Fressen gern. Eine kleine Demonstration gefällig? Der Befehl

echo \(abc\)\+

gibt den Text "(abc)+" aus – die Shell hat alle Backslashes "weggefressen". Schützen Sie Ihre Sonderzeichen also mit einem zusätzlichen Backslash vor der Shell. grep \\\(abc\\\)\\+ funktioniert. Einfacher und lesbarer: Verwenden Sie Anführungszeichen, am besten einfache (also Apostrophen): grep '\(abc\)\+' tut dasselbe und ist übersichtlicher.

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

EasyBCD/NeoGrub
Wolfgang Conrad, 17.12.2017 11:40, 0 Antworten
Hallo zusammen, benutze unter Windows 7 den EasyBCD bzw. NEOgrub, um LinuxMint aus einer ISO Dat...
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...