| 
 Shells
   Home
 Erste Schritte mit der Bourne-Shell
 Dateien zeilenweise zusammenfügen
 Head or Tail
 Schleifen und Zählen
 Shell-Variablen
 Pipes
 Sortieren von Daten
 Wer sucht der findet!
 Praktische Shell-Skripte
 Rechtschreibung
 Schleifen und elegant Zählen
 Texte formatieren mit fmt und fold
 Umlenkung der Ein- und der Ausgaben
 Klammer-Erweiterung
 Verknüpfen von Textdateien mittels Schlüsselfeldern
 Mit freundlicher Unterstützung von:
 
 Linux-Kurse und Seminare
   Veranstalter des
 Linux-Tag
 am Bodensee
 2007 und 2008
 Kontakt
 Haftung
 Impressum
 Problem Hilfe Startseite
 
 
 | Klammererweiterung
Generierung von Zeichenketten in der BashDie Klammererweiterung (englisch: brace expansion) bildet das
Kreuzprodukt aus mehreren Mengen. Sie wird häufig zur Generierung
von oder Population von synthetischen Testdecks benutzt, denn sie
bietet eine elegante Möglichkeit automatisch eine große
Menge von Verzeichnis- und Dateinamen zu generieren.
 Die Arbeitsweise der Klammererweiterung erklärt man am besten
anhand eines Beispiels.
 
 
 [bernd@localhost 020Shells]$ echo {a,b,c}{x,y,z}Im obigen Beispiel werden alle möglichen Kombinationen aus Zeichen
bestehend aus der Menge {a, b, c} und der Menge {x, y, z} gebildet.ax ay az bx by bz cx cy cz
 
 PermutationenVielen mathematisch interessierten und gebildeten Personen stellt sich
nahezu zwangsläufig die Frage, ob die Bash-Shell auch eine
einfache Möglichkeit bietet alle Permutationen1 aus
mehreren Mengen
zu bilden.
 Es lässt sich wirklich denkbar einfach realisieren, indem man das
egrep-Kommando benutzt. Im folgenden einfachen Beispiel werden alle
Permutationen aus den Zeichen 'x', 'y' und 'z' gebildet:
 
 
 echo {w,x,y,z}{w,x,y,z}{w,x,y,z}{w,x,y,z}$'\n' | egrep -v '([w-z]).*\1'Wenn jemand nicht so vertraut mit dem egrep-Kommando und vor allen
Dingen mit regulären Ausdrücken ist, stellt sich obiger
Ausdruck als schwierig zu verstehen dar.
 
 Wir erläutern deshalb diese Befehlszeile in einzelnen Schritten:
 Stände dort nur
 
 egrep '([w-z]).*'würde egrep alle Zeilen matchen und ausgeben. Übrigens
könnte man die obige Anweisung auch ohne die runden Klammern
schreiben. Wir brauchen sie allerdings noch später. Die Option "-v" bewirkt, dass nur die Zeilen ausgegeben werden, die
nicht matchen, also würde
 
 egrep -v '([w-z]).*'keine Zeile ausgeben.
 Nun betrachten wir den eigentlichen egrep-Ausdruck
 
 egrep -v '([w-z]).*\1'"\1" bewirkt, dass das erste innerhalb runder Klammern stehende
Zeichen ausgegeben wird. Im Prinzip steht also in diesem Beispiel der
reguläre Ausdruck a-priori nicht fest. Er wird erst im laufenden
Betrieb generiert, in Abhängigkeit vom gematchten String. Es werden also zunächst alle Zeichenketten ausgewählt, die
ein wiederkehrendes Zeichen haben, also z.B. ein x kommt an der 1. und
2. Position oder an der 2. und 4. Position usw. vor. Wegen des "-v"
werden nun aber nur die Zeilen ausgegeben, die keine wiederkehrenden
Buchstan enthalten.
 
 
 
 1Unter einer
Permutation (lat. permutare - vertauschen) versteht man eine
Veränderung in der Anordnung einer geordneten Menge (z.B. String)
durch Vertauschung von mindestens zwei Komponenten. In der Mathematik
versteht man unter einer Permutation eine bijektive Abbildung einer in
der Regel endlichen Menge in sich selbst.
 
 
 |