Standardowym wzorcem globowania nazw plików pasującym do cyfry jest [0-9]
. To pasuje do jednej cyfry:
cat file[0-9].txt
Aby wybrać tylko dwa z nich:
cat file[25].txt
W przypadku liczb większych niż 9 przydatne będzie rozwinięcie nawiasu klamrowego (ale patrz uwaga poniżej na temat różnicy między wzorcami globowania a rozszerzeniami nawiasów):
cat file{25..60}.txt
Ponownie rozwinięcie nawiasu pozwala również na indywidualne liczby:
cat file{12,45,900,xyz}.txt
(zauważ, że w powyższym przykładzie interpretacja nawiasów nie obejmuje pętli arytmetycznej, a jedynie generuje nazwy na podstawie podanych ciągów).
W bash
, z extglob
włączoną opcją powłoki ( shopt -s extglob
), będą również działać:
cat file@(12|45|490|foo).txt
@(...)
Wzór będzie pasował do dowolnego jednego z dołączonych |
-delimited wzorów.
Różnica między wzorcami globowania jako [...]
i @(...)
rozszerzeniami nawiasów polega na tym, że rozwinięcie nawiasów jest generowane w wierszu poleceń i może nie pasować do żadnych istniejących nazw w bieżącym katalogu. Wzorzec globowania nazw plików będzie pasował do nazw, ale powłoka nie będzie narzekać, jeśli nie wszystkie możliwe nazwy będą istnieć. Jeśli nie istnieje pasująca nazwa, wzorzec pozostanie nierozwinięty, chyba że zostanie również ustawiona nullglob
opcja powłoki, w którym to przypadku wzór zostanie usunięty.
Przykład:
touch file1
ls file[0-9]
Tutaj wyświetlana będzie tylko lista plików dla file1
.
Dzięki ls file{0..9}
, ls
że narzekają nie znalezienia file0
, file2
etc.
W poniższym przykładzie pierwsze polecenie dotknie tylko istniejących nazw, które pasują do danego wzorca, podczas gdy drugi wiersz utworzy pliki, które jeszcze nie istnieją:
touch file[0-9]
touch file{0..9}
file45.txt
. Wyrażenie w nawiasach[...]
działa tak samo jak w wyrażeniach regularnych, ale używa!
zamiast wyrażenia^
„nie w”.[...]
Wzór zawsze będzie pasował do pojedynczego znaku.