Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Operációs rendszerek gyakorlat 2008.11.18. Reguláris kifejezések.

Hasonló előadás


Az előadások a következő témára: "Operációs rendszerek gyakorlat 2008.11.18. Reguláris kifejezések."— Előadás másolata:

1 Operációs rendszerek gyakorlat 2008.11.18. Reguláris kifejezések

2 Reguláris kifejezés Bizonyos szintaktikai szabályok szerint leírt string, amivel meghatározható stringek egy halmaza. Automata elmélet, formális nyelvek Programnyelvek (Perl, PHP) Szövegszerkesztők (Emacs, vi) Segédprogramok (awk, expr, egrep)

3 a|b* jelöli a {ε, a, b, bb, bbb, …} halmazt (a|b)* által jelölt halmaz tartalmaz minden olyan stringet, amely tetszés szerinti számú a és b szimbólumból áll, valamint az üres stringet is b*(ab*)*

4 Reguláris kifejezések Shell számára bizonyos karakterek speciális jelentéssel bírnak Ezek a meta-karakterek #\{}|*+#\{}|*+ '"><&^;'"><&^; !-$[]!-$[]

5 Meta karakterek.- egyetlen karakterre illeszkedik *- 0 vagy többszöri előfordulás +- 1 vagy többszöri előfordulás \- védelem, egyetlen karakter védelme ‘- védelem, több karakter „- védelem, több karakter |- vagy &- és ^- sor elejére illeszkedés, negálás $- sor végére illeszkedés, shell változó jele -- tól ig [ ]- bármely zárójelben felsoroltra ( )- csoportosításhoz { }- előfordulás > <- átvezetés !- nem

6 Példa a megértéshez Adott egy fájl. Hogyan lehetne keresni ebben a file-ban olyan mintát, mely akárhány 'a‘ karakterből áll? grep a* test3 A probléma az, hogy a * jelet a shell fogja értelmezni és nem a grep parancs. Vagyis a fenti parancs megpróbál olyan file-okat keresni, amelyik 'a'-val kezdődik és bármi lehet utána

7 Speciális karakterek kezelése Három lehetőség van a speciális karakterek kezelésére: backslash \ egyszeres aposztróf ‘ kétszeres aposztróf” A speciális karaktereket tehát védeni kell.

8 Egyetlen karakter védelme Backslash karakterrel Pl.: Nyomtassunk ki egy olyan szöveget, amelyik egy 'a' betűvel kezdődik és 'b' betűvel végződik és a betűk között 5 darab SPACE van. echo a b Eredmény: a b Vagyis minden egyes SPACE karaktert meg kell védeni echo a\ \ \ \ \ b

9 Több karakter védelme Egyszeres vagy kétszeres aposztróffal echo 'a b‘ De: itt is van precedencia! Pl.: echo "$Hello vilag" Eredmény: vilag Mivel a $Hello egy shell változó

10 File nevek Hogyan lehetne olyan file nevet leírni, amelyik pl SPACE-t is tartalmaz: cat 'ez egy file' <<VEGE > aa > VEGE cat ez\ egy\ file <<VEGE > aa > VEGE Feladat: Hozzuk létre a következő file-t, melyben egy csillag van: hello*vilag

11 Fontos! A grep parancs nem kezeli az összes reguláris kifejezést. Ennek megoldására használjuk az egrep parancsot! Szintaxisuk azonos.

12 Példa Hozzuk létre a következő file-t (test3): Hogyan lehetne keresni a test3 file-ban olyan mintát, mely akárhány 'a‘ karakterből áll? egrep 'a*' test3 egrep 'aa*' test3 egrep 'a+' test3 aa bb cc rr tt yy aaa ooo qq ww vv aaaaa xx tt

13 Példa – folyt. Egészítsük ki a teszt3 fájlt olyan sorral, melyben szerepel a * és \ karakter. Hogyan lehetne megkeresni azt a sort, amelyik a csillag karaktert és a backslash karaktert tartalmazza? egrep '\*' test3 egrep '\\' test3 aa bb cc rr tt yy aaa ooo qq ww * vv aaaaa \ xx tt

14 Hogyan lehetne az 'u'-val kezdődő, bármilyen karaktert tartalmazó és 'a'-val végződő szöveget megkeresni? Pl: 'usa' egrep 'u.a' És ha kis és nagy betű között nincs különbség? Pl. 'USA' egrep -i 'U.A‘ Ha csak az u-val kezdődőekre illesztünk? Pl. ‘usa‘ jó, de ‘busa’ nem egrep ‘^u.a‘ egrep ‘^u.a$‘

15 Hogyan lehetne az 'u'-val kezdődő és 'a'-vel végződő szavakat keresni? A két karakter között bármi lehet, kivéve SPACE. egrep 'u[^ ]a'

16 Hogyan lehetne egy vagy több számjegyből álló szövegre keresni? egrep '[0-9]+‘ egrep ‘[0-9][0-9]*’

17 Feladatok 1.Hogyan lehetne nem csak egész, hanem valós számokra is keresni? A valós szám a pont (.) karaktert is tartalmazhatja. 2.Hogyan lehetne összevonni a fenti két példát, tehát vagy egész szám vagy egy pontot tartalmazó valós szám? 3.Mi van, ha exponenciális alak is megengedett? 4.Hogyan lehetne egy dátumra keresni, mely tartalmazza az evet, a hónapot és a napot számokkal? Pl: 1999-11-01 5.Hogyan lehetne egy programban az 'if' a 'then' vagy 'else' kifejezésekre keresni? 6.Hogyan lehetne egy programban egy szövegre keresni, mely előtt és után dupla aposztróf (") áll, illetve benne nem lehet dupla aposztróf?

18 Megoldások 1.egrep '[0-9]+\.[0-9]+‘ 2.egrep '[0-9]+|[0-9]*\.[0-9]+‘ 3.egrep '[0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?' 4.egrep '[12][0-9]{3}-[01][0-9]-[0-3][0-9]' 5.egrep 'if|then|else' 6.egrep '"[^"]"'


Letölteni ppt "Operációs rendszerek gyakorlat 2008.11.18. Reguláris kifejezések."

Hasonló előadás


Google Hirdetések