09.04.2014 Aufrufe

Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...

Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...

Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

104 7 Reguläre Ausdrücke<br />

7.1 Reguläre Ausdrücke: <strong>Die</strong> Grundlagen<br />

Zeichen<br />

Zeichenklassen<br />

Komplement<br />

Viele <strong>Linux</strong>-Kommandos dienen im weitesten Sinne zur Textbearbeitung – Muster<br />

der Form »tue xyz für alle Zeilen, die wie folgt aussehen« tauchen immer wieder<br />

auf. Ein sehr mächtiges Mittel zur Beschreibung von Textstücken, meist Zeilen in<br />

Dateien, sind »reguläre Ausdrücke« 1 . Auf den ersten Blick ähneln reguläre Ausdrücke<br />

den Suchmustern der Shell (Abschnitt 6.3), aber sie funktionieren anders<br />

und bieten mehr Möglichkeiten.<br />

Reguläre Ausdrücke werden gerne »rekursiv« aus Bausteinen aufgebaut, die<br />

selbst als reguläre Ausdrücke gelten. <strong>Die</strong> einfachsten regulären Ausdrücke sind<br />

Buchstaben, Ziffern und viele andere Zeichen <strong>des</strong> üblichen Zeichenvorrats, die<br />

für sich selber stehen. »a« wäre also ein regulärer Ausdruck, der auf das Zeichen<br />

»a« passt; der reguläre Ausdruck »abc« passt auf die Zeichenkette »abc«. Ähnlich<br />

wie bei Shell-Suchmustern gibt es die Möglichkeit, Zeichenklassen zu definieren;<br />

der reguläre Ausdruck »[a-e]« passt also auf genau eines der Zeichen »a« bis »e«,<br />

und »a[xy]b« passt entweder auf »axb« oder »ayb«. Wie bei der Shell können Bereiche<br />

gebildet und zusammengefasst werden – »[A-Za-z]« passt auf alle Groß- und<br />

Kleinbuchstaben (ohne Umlaute) –, nur die Komplementbildung funktioniert etwas<br />

anders: »[^abc]« passt auf alle Zeichen außer »a«, »b« und »c«. (Bei der Shell<br />

hieß das »[!abc]«.) Der Punkt ».« entspricht dem Fragezeichen in Shellsuchmustern,<br />

steht also für ein einziges beliebiges Zeichen – ausgenommen davon ist nur<br />

der Zeilentrenner »\n«: »a.c« passt also auf »abc«, »a/c« und so weiter, aber nicht<br />

auf die mehrzeilige Konstruktion<br />

a<br />

c<br />

Anker<br />

Zeilenanfang<br />

Zeilenende<br />

Der Grund dafür besteht darin, dass die meisten Programme zeilenorientiert vorgehen<br />

und »zeilenübergreifende« Konstruktionen schwieriger zu verarbeiten wären.<br />

(Was nicht heißen soll, dass es nicht manchmal nett wäre, das zu können.)<br />

Während Shellsuchmuster immer vom Anfang eines Pfadnamens aus passen<br />

müssen, reicht es bei Programmen, die Zeilen aufgrund von regulären Ausdrücken<br />

auswählen, meist aus, wenn der reguläre Ausdruck irgendwo in einer Zeile<br />

passt. Allerdings können Sie diese Freizügigkeit einschränken: Ein regulärer Ausdruck,<br />

der mit dem Zirkumflex (»^«) anfängt, passt nur am Zeilenanfang, und ein<br />

regulärer Ausdruck, der mit dem Dollarzeichen (»$«) aufhört, entsprechend nur<br />

am Zeilenende. Der Zeilentrenner am Ende jeder Zeile wird ignoriert, so dass Sie<br />

»xyz$« schreiben können, um alle Zeilen auszuwählen, die auf »xyz« enden, und<br />

nicht »xyz\n$« angeben müssen.<br />

B<br />

Strenggenommen passen »^« und »$« auf gedachte »unsichtbare« Zeichen<br />

am Zeilenanfang bzw. unmittelbar vor dem Zeilentrenner am Zeilenende.<br />

Wiederholung<br />

Vorrang<br />

Schließlich können Sie mit dem Stern (»*«) angeben, dass der davorstehende<br />

Ausdruck beliebig oft wiederholt werden kann (auch gar nicht). Der Stern<br />

selbst steht nicht für irgendwelche Zeichen in der Eingabe, sondern modifiziert<br />

nur das Davorstehende – das Shellsuchmuster »a*.txt« entspricht also dem regulären<br />

Ausdruck »^a.*\.txt$« (denken Sie an die »Verankerung« <strong>des</strong> Ausdrucks<br />

am Anfang und Ende der Eingabe und daran, dass ein einzelner Punkt auf alle<br />

Zeichen passt).<br />

Wiederholung hat Vorrang vor Aneinanderreihung; »ab*« ist ein einzelnes »a«<br />

gefolgt von beliebig vielen »b« (auch keinem), nicht eine beliebig häufige Wiederholung<br />

von »ab«.<br />

1 Der Begriff kommt eigentlich aus der theoretischen Informatik und beschreibt ein Verfahren zur<br />

Charakterisierung von Mengen von Zeichenketten, die aus Verkettung von konstanten Elementen,<br />

Alternativen von konstanten Elementen und deren möglicherweise unbegrenzter Wiederholung besteht.<br />

Routinen zur Erkennung regulärer Ausdrücke sind elementare Bestandteile vieler Programme,<br />

etwa Compilern für Programmiersprachen. Reguläre Ausdrücke tauchten in der Geschichte von Unix<br />

schon sehr früh auf; die meisten frühen Unix-Entwickler hatten einen Hintergrund in theoretischer<br />

Informatik, so dass die Idee ihnen nahelag.<br />

Copyright © 2012 <strong>Linup</strong> <strong>Front</strong> GmbH

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!