Vergleich Shell-Globbing mit Regulären Ausdrücken (C) 2008 T.Birnthaler/H.Gottschalk OSTC GmbH, http://www.ostc.de $Id: shell-glob-regex-cmp-HOWTO.txt,v 1.7 2008-12-22 15:39:07 tsbirn Exp $ Dieses Dokument beschreibt die Unterschiede und Gemeinsamkeiten des "Shell- Globbing" (d.h. den Shell-Mustern zur Dateinamen-Expansion) und der "Regulären Ausdrücken" (d.h. den Mustern zur Texterkennung und Ersetzung in Programmen). ________________________________________________________________________________ Inhaltsverzeichnis 1) Einführung 2) Vergleichstabelle 3) Beispiele ________________________________________________________________________________ 1) Einführung ------------- Obwohl die Sonderzeichen beim Shell-Globbing und in Regulären Ausdrücken sehr ähnlich sind, gibt es doch eine Reihe von Unterschieden, die leicht zu Verwechslungen führen. Shell-Globbing ist "schwächer" in seinen Ausdrucksmöglichkeiten als Reguläre Ausdrücke. Der größte Unterschied ist die "automatische Verankerung" bei den Shell-Mustern, die bei den Reguläre Ausdrücken durch "^" und "$" erzwungen werden muss. Außerdem ist das Leerzeichen bei Shell-Globbing ein Sonderzeichen, um mehrere Muster zu trennen. Soll es Teil des Dateinamens sein, muss es mit "\" geschützt werden. Die Unterschiede zwischen den beiden Verfahren existieren aus pragmatischen Gründen: Die Arbeitsgeschwindigkeit auf der Shell-Kommandozeile soll hoch sein, d.h. häufig benötigte Aufgaben sollen schnell einzutippen sein. Die Muster in Perl sollen leistungsfähig sein, daher sind sie etwas komplizierter einzutippen. 2) Vergleichstabelle -------------------- | | RegExp /.../ | Shell ("glob") | +----------------------+-------------------+------------------------+ | Verankerung | nicht automatisch | automatisch | | GROSS/kleinscheibung | automatisch | Betriebssystemabhängig | | ... ignorieren | /.../i oder -i | Betriebssystemabhängig | +----------------------+-------------------+------------------------+ | Quotierung | \ (NUR!) | \ "..." '...' | | Zeilenanfang (Anker) | ^ | (AUTOMATISCH) | | Zeilenende (Anker) | $ | (AUTOMATISCH) | | 1 bel. Zeichen | . | ? | | Bel. viele bel. Z. | .* | * | | Zeichenwiederh. 0-N | x* | (NICHT MÖGLICH) | | Zeichenwiederh. 1-N | x+ | (NICHT MÖGLICH) | | Zeichenwiederh. M-N | x{M,N} | (NICHT MÖGLICH) | | Optional (0-1) | x? | (NICHT MÖGLICH) | | Zeichenklasse | [abc] | [abc] | | Zeichenbereich | [a-z] | [a-z] | | Neg. Zeichenklasse | [^abc] | [!abc] evtl. [^abc] | | ZKl.wiederh. (0-N) | [abc]* | (NICHT MÖGLICH) | | ZKl.wiederh. (1-N) | [abc]+ | (NICHT MÖGLICH) | | ZKl.wiederh. (M-N) | [abc]{M,N} | (NICHT MÖGLICH) | | ZKl. optional (0-1) | [abc]? | (NICHT MÖGLICH) | | Oder | M1|M2|... | {M1,M2,...} | | Klammern | (...) | (NICHT MÖGLICH) | +----------------------+-------------------+------------------------+ | Stern | \* | \* | | Fragezeichen | \? | \? | | Punkt | \. | . | | Dach | \^ | ^ | | Dollarzeichen | \$ | $ | | Leerzeichen | " " oder [ ] | \ oder " " oder ' ' | | Eckige Klammern | \[ \] | \[ \] | +----------------------+-------------------+------------------------+ | Keine Verankerung | abc | *abc* | | Links verankert | ^abc | abc* | | Rechts verankert | abc$ | *abc | | Voll verankert | ^abc$ | abc | +----------------------+-------------------+------------------------+ 3) Beispiele ------------ * Beispiele für Regex-Muster und ihre Treffer (*) bzw. Nicht-Treffer (-) (Strings, Zeilen) | =~ | /a/ /./ /[abc]/ /[a-z]/ /[^a-z]/ /^[a-z]/ /[a-z]$/ /^[a-z]$/ | +-----+---------------------------------------------------------------------+ |d | - * - * - * * * | |made | * * * * - * * - | |abc | * * * * - * * - | |aaaa | * * * * - * * - | |xyz | - * - * - * * - | |"" | - - - - - - - - | |" " | - * - - * - - - | |" "| - * - - * - - - | |* | - * - - * - - - | +-----+---------------------------------------------------------------------+ * Beispiel für Shell-Muster und ihre Treffer (*) bzw. Nicht-Treffer (-) (Dateinamen, glob) | | *a* *?* *[abc]* *[a-z]* *[!a-z]* [a-z]* *[a-z] [a-z] | +-----+---------------------------------------------------------------------+ |d | - * - * - * * * | |made | * * * * - * * - | |abc | * * * * - * * - | |aaaa | * * * * - * * - | |xyz | - * - * - * * - | |"" | - - - - - - - - | |" " | - * - - * - - - | |" "| - * - - * - - - | |* | - * - - * - - - | +-----+---------------------------------------------------------------------+