Csillag

A csillag sokak számára ismerősnek tűnhetik – és jó esély van arra is, hogy valaki itt veszítse el a fonalat… A csillag ismerős lehet a dos/windows-vonalról éppen úgy, mint a linux parancssorából – és miközben felfedezhető távoli és homályos rokonság, a reguláris kifejezésekben a csillag másképp működik.

A csillag jelentése a következő: az előző karakterből nulla vagy több. Más szavakkal: az előző karakterből valamennyi, esetleg semennyi. Első látásra ennek nem sok értelme van; ha őszinték vagyunk, másodikra sem:

tux@madas:~/public_html/txt/mp$ grep q* ksh_hnk_1913.txt | wc
  12538   12548  137383
tux@madas:~/public_html/txt/mp$ 

A fentiek szerint tehát 12538 olyan település van, melynek nevében van néhány q, megengedve azt az esetet is, hogy sehány sincs: erre –a várakozásoknak megfelelően– az összes település nevét megkapjuk.

A .* jelentése: bármiből bármennyi (esetleg semennyi) – ez még az előzőnél is haszontalanabbnak tűnik. Megfelelő helyzetben azonban megmutatkozik az ereje:

tux@madas:~/public_html/txt/mp$ grep j.*j ksh_hnk_1913.txt 
jászóváralja
jászóújfalu
rafajnaújfalu
zsilyvajdejvulkán
vajdej
vajdej
pojeniczavojni
bojtorjános
héjjasfalva
jánosújfalu
jászkarajenő
újhelyjóka
lajtaújfalu
dabjonújfalu
újjózseffalva
jobbágyújfalu
újbajna
sátoraljaújhely
tux@madas:~/public_html/txt/mp$ grep ly.*ly ksh_hnk_1913.txt 
szentmihálykörtvélyes
székelyuraly
mélykastély
székelydálya
székelyszentmihály
székelyszentkirály
székelyudvarhely
zólyommihályi
tux@madas:~/public_html/txt/mp$ 

Mi magyarázza az alábbiakat?

tux@madas:~/public_html/txt/mp$ grep j.*ly ksh_hnk_1913.txt | wc
     18      18     258
tux@madas:~/public_html/txt/mp$ grep ly.*j ksh_hnk_1913.txt | wc
     12      12     179
tux@madas:~/public_html/txt/mp$ 

És ha a fenti kérdésre megvan a válasz, mi a magyarázat a következőre?

tux@madas:~/public_html/txt/mp$ grep j ksh_hnk_1913.txt | grep ly | wc
     29      29     424
tux@madas:~/public_html/txt/mp$ 

Ha szerencsések vagyunk elsőre, rosszabb esetben másodikra megtaláljuk az eltérés okát:

tux@madas:~/public_html/txt/mp$ grep j.*ly.*j ksh_hnk_1913.txt
újhelyjóka
tux@madas:~/public_html/txt/mp$ 

Egy korábbi lecke alapján megkereshettük a legtöbb karakterből álló településnevet. Ha a hosszúságot most a szótagok számával mérjük, akkor a következő eredményt kapjuk:

tux@madas:~/public_html/txt/mp$ grep [aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű] ksh_hnk_1913
 keletifelsőszombatfalva
 nyugotifelsőszombatfalva
 alsórásztok és felsőrásztok
tux@madas:~/public_html/txt/mp$ grep [aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű].*[aáeéiíoóöőuúüű] ksh_hnk_1913
tux@madas:~/public_html/txt/mp$ 

A csillag azonban nem csak a pont után lehet hasznos. Az alábbi paranccsal kiírathatjuk például azoknak a településeknek a nevét, amelykben a betűk abc-rend szerint növekednek (a kettős mássalhangzóktól most eltekintünk):

tux@madas:~/public_html/txt/mp$ grep ^a*á*b*c*d*e*é*f*g*h*i*í*j*k*l*m*n*o*ó*ö*ő*p*q*r*s*t*u*ú*ü*ű*v*w*x*y*z*$ ksh_hnk_1913.txt | wc
     40      40     200
tux@madas:~/public_html/txt/mp$ grep ^a*á*b*c*d*e*é*f*g*h*i*í*j*k*l*m*n*o*ó*ö*ő*p*q*r*s*t*u*ú*ü*ű*v*w*x*y*z*$ ksh_hnk_1913.txt | grep ....
aklos
borz
bors
bény
hort
diós
csúz
abos
ákos
alőr
bély
tux@madas:~/public_html/txt/mp$ 

Az előző pédában a kalapnak és a dollárnak fontos szerepe volt:

tux@madas:~/public_html/txt/mp$ grep a*á*b*c*d*e*é*f*g*h*i*í*j*k*l*m*n*o*ó*ö*ő*p*q*r*s*t*u*ú*ü*ű*v*w*x*y*z* ksh_hnk_1913.txt | wc
  12538   12548  137383
tux@madas:~/public_html/txt/mp$