Tõenäoliselt oled juba kokku puutunud metamärkidega, isegi kui sa ei tea, mida see täpselt tähendab. Kui näiteks soovid Windows® kasutades faili otsida või avada, võid kasutada suvalise faili leidmiseks sümbolit *
. Näiteks *.txt
leiab kõik failid, mille nime lõpus seisab .txt
. Me kasutasime seda üsna palju ka viimases osas. Kuid metamärgid võimaldavad palju enam kui pelgalt *
sellist kasutamist.
Kui Te kirjutate käsu ls *.txt ja vajutate klahvi Enter, ei soorita selliste failide otsimist, mis vastaksid mustrile *.txt
, mitte käsk ls, vaid shell
ise. Siinkohal tasub veidi seletada, kuidas shell
tõlgendab käsurida. Kui Te kirjutate:
$ ls *.txt readme.txt recipes.txt
jagatakse käsurida kõigepealt sõnadeks (ls
ja *.txt
antud näites). Kui shell näeb sõnas sümbolit *
, tõlgendab see kogu sõna metamärki kasutava mustrina ning asendab selle kõigi sobivate failide nimedega. Seepärast omandab käsk enne seda, kui shell selle teostab, kuju ls readme.txt recipe.txt, mis annabki meile oodatud tulemuse. Ka mõned muud sümbolid panevad shelli selliselt käituma:
?
: sobib üks ja ainult üks sümbol sõltumata sellest, milline see sümbol on;
[...]
: sobib iga nurksulgudes leiduv sümbol. Sümboleid võib anda kas sümbolite vahemikuna (s.t. 1-9
) või diskreetsete väärtustena või mõlemal kujul. Näide: [a-zBE5-7]
korral sobivad kõik sümbolid a
ja z
vahel, B
, E
, 5
, 6
või 7
;
[!...]
: sobib iga sümbol, mida ei leidu nurksulgudes. Näiteks [!a-z]
korral sobib iga sümbol, mis ei ole väiketäht[14];
{c1,c2}
: sobib c1
või c2
, kus c1
ja c2
on omakorda samuti metamärke kasutavad mustrid, mis tähendab, et võite näiteks kirjutada {[0-9]*,[acr]}
.
Toome siin ära mõningad mustrid ja nende tähendused:
/etc/*conf
: kõik failid kataloogis /etc
, mille nime lõpus seisab conf
. Sobivad /etc/inetd.conf
, /etc/conf.linuxconf
ja ka /etc/conf
, kui see on olemas. Pidage meeles, et *
võib tähendada ka tühja stringi.
pildid/{autod,kosmos[0-9]}/*.jpg
: kõik failid, mille nime lõpus seisab .jpg
, kataloogides pildid/autod
, pildid/kosmos0
, (...), pildid/kosmos9
, kui need kataloogid on olemas.
/usr/share/doc/*/README
: kõik failid nimega README
kõigis kataloogi /usr/share/doc
otsestes alamkataloogides. See tähendab, et sobib näiteks /usr/share/doc/mandriva/README
, aga mitte /usr/share/doc/minuprogramm/doc/README
.
*[!a-z]
: kõik failid aktiivses kataloogis, mille nime lõpus ei seisa väiketäht.
[14] Ettevaatust! See võib küll nii olla paljude keelte korral, aga mitte tingimata Teie keele puhul (lokaat
). See sõltub niinimetatud põimejärjekorrast. Mõnes keeles vastab määratlusele [a-z]
a, A, b, B, (...), z. Ja me ei hakka mainimagi, et mõnes keeles on näiteks täpitähed...