|
|
Zur Generierung von Dateinamen und bei Kontrollstruktur case. gibt es in der Shell folgende Operationen :
c normalerweise stellt ein Zeichen sich selbst dar \c 'c...' "c..." Sonderbedeutung unterdrücken ? beliebiges, einzelnes Zeichen * beliebig viele beliebige Zeichen [...] einzelnes Zeichen aus Klasse, auch Bereich a-z [!...] einzelnes Zeichen nicht aus Klasse (nicht X/Open) r1r2 r1 und dann r2 r1|r2 case r1 oder r2
Bei Dateinamen werden . am Anfang und / überall nur explizit erkannt.
Beispiele:
$ ls ? * $ ls -l * -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 * -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 c.01 -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 c.02 -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 c.09 -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 ccb -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 ccr -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 fiver $ ls '*' * $ ls -l c*[0-9] -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 c.01 -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 c.02 -rw-r--r-- 1 bischof inform 0 Apr 10 10:03 c.09 $ ls -l 'c*[0-9]' ls: c*[0-9]: No such file or directory $ ls c.0[!29] c.01 $ ls ??[!b] ccr
Bei regulären Ausdrücken gibt es mit abnehmendem Vorrang folgende Operationen :
c normalerweise stellt ein Zeichen sich selbst dar
\c Sonderbedeutung unterdrücken
^ Zeilenanfang
$ Zeilenende
. beliebiges, einzelnes Zeichen
[...] einzelnes Zeichen aus Klasse, auch Bereich a-z
[^...] einzelnes Zeichen nicht aus Klasse
\(r\) grep markierter Ausdruck
\n grep was die n-te \(r\) erkannte
r* beliebig viele r
r+ egrep ein oder mehr r
r? egrep ein oder kein r
r\{m,n\} Anzahl, r von m bis n mal
r\{m,\} Anzahl, r mindestens m mal
r\{m\} Anzahl, r genau m mal
r1r2 r1 und dann r2
r1|r2 egrep r1 oder r2
(r) egrep Klammerung für Vorrang
Vorsicht: mit Ausnahme von \n bei lex erkennt kein regulärer Ausdruck einen Zeilentrenner.
Beispiele Hier sind zum Vergleich die gleichen Beispiele als grep-Muster:
\.c$ C-Quellen ^cmd\..$ Dateien für cmd ^[A-Z] Dateinamen mit großen Anfangsbuchstaben ^[^A-Z] andere Dateinamen ^c\.[1-9]?[0-9]$ ein großes Buch (plus ein Kapitel) [^./] Dateinamen mit einem Zeichen, nicht . oder / ^\. alle Dateinamen, die mit . anfangen ^\.[^.] alle mit . aber nicht . und .. ^\.(..|[^.]) besser (egrep)
Vorsicht: Reguläre Ausdrücke erkennen die längste Zeichenkette, und sie sind nur verankert, wenn ^ und $ benutzt werden. Manche egreps haben (8-Bit-)Fehler.
Wortspiele
/usr/dict/words (siehe auch spell ) enthält (oft) ein englisches Wörterbuch. Bei NeXT gibt es zusätzlich die Wort- und Stammliste /usr/dict/web2. Kernighan und Pike schlagen folgende Muster für Wortspiele vor:
$ egrep '^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?$' \ /usr/dict/words | sed 3q a abc abet
monotone liefert Worte mit Buchstaben in natürlicher Reihenfolge:
$egrep '^[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*$'\ /usr/dict/words | sed 3q facetious
liefert Worte mit exakt fünf aufsteigenden Vokalen:
Vorsicht: grep kennt die Option -f nicht.
Nützliche grep-Optionen:
-e re egrep Präfix für reguläre Ausdrücke -f file nicht grep Ausdruck aus Datei -l Dateiname ausgeben, falls Zeile gefunden -n Zeilennummer ausgeben -v (veto) nur wenn Muster nicht zutrifft -x fgrep ganze Zeile muß passen -y groß und klein gleich (X/Open: -i)
|
|
Last modified 03/July/97