[Next] [Previous] [Top]

UNIX-Lehrtext

Anhang: Einfache reguläre Ausdrücke


Reguläre Ausdrücke werden in verschiedenen Unix-Utilities und Editoren verwendet, um nach Ausdrücken zu suchen und/oder diese zu ersetzen. Dieses Kapitel beschränkt sich auf einfache reguläre Ausdrücke wie sie etwa in vi verwendet werden. Wer sich für den vollen Umfang der Möglichkeiten regulärer Ausdrücke interessiert, sollte einmal einen Blick in die Manualseiten zu egrep werfen.

Ein regulärer Ausdruck kann eine einfache Ansammlung von Buchstaben sein oder eine Kombination von Zeichen, die bestimmte Gruppen von Ausdrücken beschreibt. Das wird dadurch erreicht, dass einigen Zeichen spezielle Bedeutung zugewiesen wird. Will man nun eines dieser Sonderzeichen wörtlich in einem Suchausdruck verwenden, so muss man es zitieren, indem das Escape-Zeichen der regulären Ausdrücke, ein "\", dem Sonderzeichen vorangestellt wird. "\\" steht für den wörtlichen Rückwärts-Schrägstrich.

Die Möglichkeit, mithilfe von Sonderzeichen eine ganze Gruppe von Ausdrücken zu beschreiben, ist bereits von der Dateinamen-Ergänzung der Shell her bekannt. Dort haben "*", "?", "[" und "]" eine spezielle Bedeutung. Reguläre Ausdrücke sind komplizierter, aber auch mächtiger.

In den meisten Fällen müssen reguläre Ausdrücke zwischen zwei gleichen Zeichen, den Begrenzern, geklammert werden. Die Begrenzer können jedes Zeichen sein, solange sie das erste Zeichen eines regulären Ausdrucks sind. D.h., dass das erste Zeichen eines regulären Ausdrucks automatisch als Begrenzer gilt und dann innerhalb dieses Ausdruckes ein Sonderzeichen darstellt. Oft wird dafür ein Schrägstrich "/" verwendet, der auch in den folgenden Beispielen diese Funktion erfüllen wird.

Der einfachste reguläre Ausdruck ist eine ganz gewöhnliche Buchstabenreihe. Sie steht nur für sich selbst. Der Ausdruck /abc/ passt daher zu jedem Ausdruck wie "abc", "aabcc", "qabch5" etc.

Sonderzeichen für reguläre Ausdrücke sind:

. (Punkt)
steht für irgendein einzelnes Zeichen (wie das "?" in der Dateinamen-Ergänzung der Shell)
[ ]
wie in der Shell. Dies repräsentiert ein Einzelzeichen, das sich in einer Liste in den Klammern (wie in [abc]) oder in einem gegebenen Bereich befindet (wie in [a-c]). Folgt der linken Klammer unmittelbar ein "^", so wird jedes Einzelzeichen repräsentiert, das sich nicht in der Liste oder dem angegebenen Bereich befindet. Die Sonderzeichen "\, *, $" (siehe unten) verlieren innerhalb der Klammern ihre spezielle Bedeutung. Das "^" ist nur als erstes Zeichen innerhalb der Klammer ein Sonderzeichen. Ein Minuszeichen wird zur Angabe eines Bereichs verwendet und ist daher innerhalb der Klammern ein Sonderzeichen, ausser als erstes Zeichen nach "[" oder "[^". Die rechte Klammer "]" ist natürlich auch ein Sonderzeichen.
*
Ein Stern nach einem regulären Ausdruck, der ein Einzelzeichen repräsentiert, bedeutet, dass dieser Ausdruck keinmal oder mehrere Male erscheinen kann. "ab*c" würde also zu "ac", "abc", "abbc" etc. passen.
Ein Stern nach einem Punkt steht für jeden beliebigen Ausdruck. Dies ist äquivalent zum Stern in der Shell.
^
Ein regulärer Ausdruck, der mit einem Dach "^" beginnt, steht nur für Ausdrücke am Zeilenanfang.
$
Ein regulärer Ausdruck, der mit einem "$" endet, steht nur für Ausdrücke am Zeilenende.
\( und \)
Zitierte runde Klammern werden verwendet, um Teile eines regulären Ausdrucks in Gruppen zusammenzufassen. Auf diese Gruppen kann man sich später mittels zitierter Ziffern beziehen.
Die beiden nächsten Zeichen haben in vi und sed spezielle Bedeutung beim Suchen und Ersetzen:

Um Mehrdeutigkeiten zu vermeiden, gibt es die folgenden Regeln:


UNIX-Lehrtext - 23 SEP 94
[Next] [Previous] [Top]

Generated with WebMaker