Das Standard-Globbing-Muster für Dateinamen, das mit einer Ziffer übereinstimmt, lautet [0-9]
. Dies entspricht einer einzelnen Ziffer:
cat file[0-9].txt
So wählen Sie nur zwei davon aus:
cat file[25].txt
Bei größeren Zahlen als 9 ist die Klammererweiterung nützlich (siehe jedoch Hinweis unten für den Unterschied zwischen Globbing-Mustern und Klammererweiterungen):
cat file{25..60}.txt
Auch hier ermöglicht die Klammererweiterung einzelne Zahlen:
cat file{12,45,900,xyz}.txt
(Beachten Sie, dass im obigen Beispiel die Klammererweiterung keine arithmetische Schleife beinhaltet, sondern nur Namen basierend auf den bereitgestellten Zeichenfolgen generiert.)
In bash
, wenn die extglob
Shell-Option aktiviert ist ( shopt -s extglob
), funktioniert auch Folgendes:
cat file@(12|45|490|foo).txt
Das @(...)
Muster |
stimmt mit einem der eingeschlossenen begrenzten Muster überein.
Der Unterschied zwischen Globbing-Mustern als [...]
und @(...)
und Klammererweiterungen besteht darin, dass eine Klammererweiterung in der Befehlszeile generiert wird und möglicherweise nicht mit vorhandenen Namen im aktuellen Verzeichnis übereinstimmt. Ein Dateinamen-Globbing-Muster stimmt mit den Namen überein, aber die Shell beschwert sich nicht, wenn nicht alle möglichen Namen vorhanden sind. Wenn kein übereinstimmender Name vorhanden ist, bleibt das Muster nicht erweitert, es sei denn, auch die nullglob
Shell-Option ist festgelegt. In diesem Fall wird das Muster entfernt.
Beispiel:
touch file1
ls file[0-9]
Hier wird nur die Dateiliste für file1
angezeigt.
Mit ls file{0..9}
, ls
würde die Suche nach bemängelt nicht file0
, file2
usw.
Im folgenden Beispiel berührt der erste Befehl nur vorhandene Namen , die dem angegebenen Muster entsprechen, während in der zweiten Zeile Dateien erstellt werden, die noch nicht vorhanden sind:
touch file[0-9]
touch file{0..9}
file45.txt
. Der Klammerausdruck[...]
funktioniert genauso wie der reguläre Ausdruck, wird jedoch!
anstelle von^
"nicht in" verwendet. Ein[...]
Muster entspricht immer einem einzelnen Zeichen.{1,2}
ist auch nicht POSIX-konform ... habe heute ein paar neue Dinge gelernt!grep
, URLs zu generierencurl
, an die übergeben werden soll ... aber es kann auch verwirrend sein an Menschen, die es gewohnt sind, mit Globs zu arbeiten.Die Syntax zur Verwendung ist ,
file{1,2}
die evaluierenfile1
undfile2
.Wie Inian auch weiter unten betonte ... wäre es
touch file{1..9}
in diesem Beispiel einfacher ...Sie können auch mehrere Ausdrücke verwenden, z.
Ja, mit den oben genannten Dateien werden 234 (
9
Mal-26
) Dateien erstellt.quelle
file{1,2}
Syntax ist auch praktisch, um Dateien umzubenennen:mv some_very_long_filename.txt{,.bak}
Ja, Sie können die Klammererweiterung in der
bash
Schale verwenden. Für nur ein paar Dateien einfachfile{1..2}
oder genausofile{1,2}
Oder wenn Sie sich Sorgen machen, dass die Dateien in einigen Fällen nicht vorhanden sind, führen Sie einfach eine einfache Schleife durch.
Oder wenn nur die Verkettung Ihre einzige Operation für die Dateien ist und Sie nicht sicher sind , welche Dateien zu irgendeinem Zeitpunkt nicht vorhanden sein könnten, nur
cat
diese und unterdrücken Sie die Fehler. Eine Umleitung des Standardfehlers auf/dev/null
würde die Fehler unterdrücken, wenn die Datei nicht verfügbar ist.oder verwenden Sie den Glob-Ausdruck,
file[15]
der sich nicht über die Fehler beschwert, wenn die Datei nicht gefunden wurde.quelle
file{1,5}
!