Sie benutzen Suchmuster vermutlich schon, ohne sich dessen bewusst zu sein. Wenn Sie etwa unter Windows nach einer Datei suchen, verwenden Sie *, um eine Zeichenkette zu erfassen. *.txt beispielsweise passt auf alle Dateien, deren Name auf .txt endet. Suchmuster wurden auch bereits in den vorhergehenden Kapiteln eingesetzt. Doch es gibt mehr Platzhalter als nur *.
Wenn Sie einen Befehl wie ls *.txt eingeben und Eingabe drücken, wird die Suche nach passenden Dateien nicht von ls durchgeführt, sondern von der Shell selbst. Kommandos werden nämlich folgendermaßen interpretiert:
$ ls *.txt readme.txt rezepte.txt |
Die Kommandozeile wird von der Shell zuerst in ihre Bestandteile zerlegt (hier: ls und *.txt). Sieht sie * in einem Bestandteil, interpretiert sie die Zeichenkette als Suchmuster und ersetzt sie durch alle in Frage kommenden Dateinamen (etwa ls readme.txt rezept.txt) und führt dann den eigentlichen Befehl (hier: ls) aus. Einige andere Zeichen haben ebenfalls eine besondere Bedeutung:
?: vertritt genau ein Zeichen;
[...]: Ein Platzhalter für genau ein Zeichen das in den Klammern vorkommenden. Zeichen können als Bereich (etwa 1-9), diskrete Werte oder gar als beides angegeben werden. Hier ein Beispiel:
[a-zBE5-7] steht für die Zeichen von a bis z, ein B, ein E, eine 5, eine 6 oder eine 7;
[!...]: vertritt jedes Zeichen, welches nicht in der Klammer vertreten ist. Somit steht [!a-z] beispielsweise für alle Zeichen, die keine Kleinbuchstaben sind;
{c1,c2}: steht für c1 oder c2, wobei c1 und c2 ebenfalls Suchmuster darstellen.
Es folgen einige Beispiele für Suchmuster:
/etc/*conf: Steht für Dateien im Verzeichnis /etc, deren Name auf conf endet (wie etwa /etc/inetd.conf oder auch /etc/conf, da * auch für ein ,,leeres`` Zeichen stehen kann.
image/cars,space[0-9]/*.jpg: Alle Dateien in den Ordnern image/cars, image/space0, bis image/space9 mit der Dateiendung .jpg.
/usr/doc/*/README: Alle Dateien, die README heißen und sich in Unterverzeichnissen erster Ordnung des Verzeichnisses /usr/doc befinden (etwa die Datei /usr/doc/mandrake/README aber nicht die folgende /usr/doc/myprog/doc/README).
*[!a-z]: Alle Dateien im aktuellen Verzeichnis, die nicht auf einen Kleinbuchstaben enden.