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