Vyhladavanie podretazcov (regularnych vyrazov) v suboroch

grepregexp suborynajde vsetky vyskyty regularneho vyrazu regexp v suboroch subory vypise meno suboru a prislusny riadok
grep -nregexp suboryako grep ale vypisuje aj cisla riadkov
grep -iregexp suboryako grep, v regularnom vyraze nerozlisuje medzi velkymi a malymi pismenami
grep -oregexp suboryVypisuje len tie casti riadkov zodpovedajuce hladanemu vyrazu.
grep -vregexp suboryInverzne hladanie. Vypisuje iba riadky neobsahujuce retazec zodpovedajuci regularnemu vyrazu.

Regularne vyrazy

Reg Vyraz
Vyznam
Priklad vyrazuPriklad zahrnutych retazcovPriklad vylucenych retazcov
znaknormalne znaky (cisla, pismena) su regularne vyrazy reprezentujuce seba.toto toto 
.Akykolvek znakt.t tot tut tat ...oto tt
\(expr\)To iste ako expr\(toto\) toto 
expr*Opakovanie expr lubovolne vela krat (0-n krat)t* t tt ttt tttt ...ta taa ata
  to*t tt tot toot tooot ...toat ttt
  \(toto\)* toto totototo ... 
expr\+Opakovanie expr aspon raz (1-n krat)to\+t tot toot tooot ...tt
[znak1znak2...]Lubovolny znak zo znakov znak1 znak2 ...t[oua]ttot tut tattet
[znak1-znak2]Lubovolny znak s ASCII kodom z intervalu od znak1 po znak2t[a-c]ttat tbt tcttot tut
  [A-Z0-9]A 0 B 7a b
[^znak]Lubovolny znak okrem znaku znakt[^o]ttut tat ...tot
[^znak1-znak2]Lubovolny znak okrem znakov s ASCII kodmi z intervalu znak1 po znak2t[^c-z0-9A-Z]ttat tbt ...tct t0t tBt
\(expr1 \| expr2\)Lubovolny z dvoch podvyrazov expr1 a expr2t\(aa\|bb\)ttaat tbbttabt
     
\bPrazdny retazec na zaciatku a konci slova\btoto\btoto tototo
^Prazdny retazec na zaciatok riadku   
$Prazdny retazec na konci riadku   


Priklady na pouzitie prikazu grep:

Vyhladaj (pravdepodobne) vsetky priradenia do premennej "s_symbolTab" vo vsetkych zdrojovych suboroch v aktualnom adresari.
guma:vittek:~/csolve/src>grep -n "s_symbolTab.*=" *.c 
semact.c:379:		s_symbolTab = cscope;
semact.c:445:		s_symbolTab = cscope;
Vyhladaj vsetky vyvolania funkcie "fatalError":
guma:vittek:~/csolve/src>grep -n "\bfatalError\b" *.c 
gen.c:28: 			fatalError(ERR_ST, tmpBuff);
main.c:92:	if (yyin == NULL) fatalError(ERR_CANT_OPEN, s_inputFile);
main.c:98:	if (ccOut == NULL) fatalError(ERR_CANT_OPEN, s_cFile);
commons.c:112:void fatalError(int errCode, char *mess) {
commons.c:125:	fatalError(ERR_INTERNAL_CHECK,tmpBuff);
runtime.c:295:			fatalError(ERR_INTERNAL,tmpBuff);
semact.c:117:	fatalError(ERR_ST, bbb);












Cvicenia:


1.)  Skopirujte subor cvika-grep.c do svojho pracovneho adresara. 

2.)  Napiste prikaz, ktory prehlada subor cvika-grep.c a vyhlada vsetky 
riadky obsahujuce vyvolania a definiciu funkcie createVarHandler. 

3.)  Podobne ako v cviceni 2 napiste prikaz, ktory prehlada subor 
cvika-grep.c a vyhlada vsetky riadky obsahujuce vyvolania a definiciu 
funkcie createVarHandler ale nie funkciu 'createVarHandlersForExprs'.


4.)  Napiste prikaz, ktory prehlada subor cvika-grep a najde vsetky
riadky ktore obsahuju identifikator (t.j. retazec pozostavajuci z pismen 
a cislic) konciaci jedinou cislicou. T.j. za poslednym pismenom je prave 
jedna cislica. Tomu zodpoveda napriklad identifikator t1 ale nie t21.


5.)  Napiste prikaz, ktory vyhlada vsetky riadky obsahujuce retazec
't1' alebo retazec 't2'.


6.)  Napiste prikaz, ktory vyhlada vsetky riadky obsahujuce retazec
't1' a sucasne retazec 't2'.


7.)  Napiste prikaz, ktory vypise len riadky obsahujuce priradenie do
premennej 'l' ale nie testy na rovnost (t.j. vypise riadky l=0; 
ale nie napriklad l == xy).