Reguläre Ausdrücke in UNIX |
|
Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru Verlagsrechte bei galileo computing |
gaston> ls -l | grep ^d drwxr-xr-x 3 arnold users 4096 Jun 25 20:57 pic drwxr-xr-x 2 arnold users 4096 Jun 28 20:55 unprog gaston> |
In dem grep wird also ein d gesucht, dass direkt dem Zeilenanfang folgt, oder anders ausgedrückt, das am Anfang der Zeile steht. Ohne das Dach hätte man alle Zeilen erhalten, in denen ein d steht. Da der Benutzer arnold heißt, wären das wohl jede Datei des Verzeichnisses.
| Ausdruck | Bedeutung |
|---|---|
| . (Punkt) | Steht für ein einzelnes beliebiges Zeichen |
| [afg] | Das Zeichen a, f oder g muss an dieser Stelle erscheinen |
| [0-9] | Eine Ziffer muss an dieser Stelle stehen |
| * | Das vorangehende Zeichen kommt beliebig oft vor |
| + | Das vorangehende Zeichen kommt mindestens einmal vor |
| ^ | Zeilenanfang |
| $ | Zeilenende |
| \< | Wortanfang |
| \> | Wortende |
| \ | Das folgende Zeichen wird nicht als Metazeichen interpretiert |
| \( \) | Markierung eines Bereichs |
| \1 \2 \dots | Referenz auf erste und zweite Markierung |
\section{Dies ist ein spannendes Kapitel}
<H1>Dies ist ein spannendes Kapitel</H1>
|
Um alle Vorkommen von section in die entsprechenden <H1> umzuwandeln, wird ein regulärer Ausdruck verwendet. Zunächst wird das Muster beschrieben, das eine section erkennt.
\\section{.*}
|
Der doppelte Backslash muss sein, damit er nicht als Kommando missinterpretiert wird. In den geschweiften Klammern steht schlicht Punkt Stern, also der Ausdruck für eine beliebige Zeichenfolge. Das ist unsere Überschrift, die wir gern übernehmen wollen. Also wird davor und dahinter eine Markierung gemacht.
\\section{\(.*\)}
|
Nun wird das Ganze in den Ersetzungsbefehl von vi eingesetzt. Der komplette Aufruf lautet also:
:1,$ s/\\section{\(.*\)}/<H1>\1<\/H1>/g
|
Der letzte Backslash der Zeile muss sein, sonst glaubt vi, dass der Schrägstrich des </H1> der Befehl dafür wäre, dass der Ersetzungsbereich hier ende. Die Zeichenfolge \1 in der Ersetzung liefert den in der Markierung gemerkten Wert und befördert die Überschrift in die gewünschte, neue Umklammerung.
Machen Sie sich klar, dass Sie sich mit diesem zugegeben etwas kryptischen Befehl vielleicht stundenlange Arbeit ersparen, wenn Sie in einem langen Dokument die Überschriften austauschen müssen. Und überlegen Sie sich auch, ob Sie so etwas mit einem normalen Editor ohne reguläre Ausdrücke auch könnten.
Der Grund, dass so viele Programme mit regulären Ausdrücken umgehen können, liegt daran, dass UNIX dem Programmierer die Suche nach regulären Ausdrücken aus einer Bibliothek anbietet.
|
Diese Seite basiert auf Inhalten aus dem Buch
Arnold Willemer: Wie werde ich UNIX-Guru Verlagsrechte bei galileo computing |
| Homepage |
(C) Copyright 2002 Arnold Willemer
|