Znaki uogólniające: jeden lub wiele znaków używanych do tworzenia nazw plików w Linux– pozwalają użytkownikowi wystukać w linii poleceń niekompletną nazwę pliku. Innymi słowy przy pomocy znaków uogólniających tworzy się symboliczny wzorzec pasujący do większej liczby plików. Znaków uogólniających wyróżniamy cztery:
* → oznacza dowolnej (również zerowej) długości łańcuch znaków.
? → dowolny pojedynczy znak
[..] → użycie nawiasów kwadratowych może przybrać wiele form
[azs] → oznacza, literę „a” lub literę „z” lub literę „s”. Poszukiwany ciąg znaków musi zawierać jedną z tych liter.
[0-9] → oznacza liczbę 0 albo 1 albo 2 albo 3 albo 4 albo 5 albo 6 albo 7 albo 8 albo 9
[!rty] → oznacza każdy znak oprócz litery r, t,y
[!0-9] → oznacza każdy znak, który nie jest liczbą
{..} → mechanizm rozwijania nawiasów
Przykłady: Przypuśćmy, że nasz katalog domowy zawiera następujące pliki: (p1 p2 p3 p58 p45 pb pz a1kb2lc4k art54lnm012 p+) pliki te możemy stworzyć przy pomocy polecenia touch albo przy pomocy edytora vi ale wtedy doradzamy wypełnienie ich jednym czy dwoma wyrazami, jest to bardziej pracochłonne ale utrwala znajomość edytora vi.
$ ls -l
p1 p2 p3 p58 p45 pb pz a1kb2lc4k art54lnm012 p+
$ ls p[1-3]
p1 p2 p3
$ ls p[123]
p1 p2 p3
Jak widzimy ten sam rezultat możemy uzyskać stosując różne formy znaków uogólniających.
Czy rezultat widoczny powyżej można uzyskać w jeszcze inny sposób?
$ ls [!123bz]
p+
$ ls a*b*c*
a1kb2lc4k
$ ls p[0-9]*
p1 p2 p3 p58 p45
$ echo p*
p1 p2 p3 p58 p45 pb pz p+
Jeżeli w katalogu znajdowałby się plik pod nazwą p to czy też byłby wyświetlony w wyniku egzekucji polecenia echo p* - wykonaj te ćwiczenie praktycznie i spróbuj uzasadnić rezultaty egzekucji.
$ echo p?
p1 p2 p3 pb pz p+
Czy umiesz wyjaśnić rezultaty powyższych ćwiczeń?
Spróbujmy wyjaśnić teraz na konkretnych przykładach funkcjonowanie mechanizmu rozwijania nawiasów symbolizowana przez {…}. W tym celu utwórzmy w naszym katalogu domowym pliki o nazwach: oron, polko, oron1, oron2, polko3 i przećwiczmy zastosowanie funkcjonowanie { } na przykładach.
$ ls *{ro,lk}*
oron polko oron1 oron2 polko3
Wzorzec *{ro,lk}* oznacza → wszystkie pliki zawierające w nazwie łańcuch znaków : ro lub lk
$ ls *{1,3}
oron1 oron2 polko3
Wzorzec *{1,3} oznacza → wszystkie pliki których nazwa kończy się cyfrą 1 lub 2 lub 3
$ ls *{l,k}*
polko polko3
Wzorzec *{l,k}* oznacza → wszystkie pliki które mają w nazwie litery l lub k
Kurs Linux - Bash: znaki uogólniające Linux