Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaHenrik Németh Megváltozta több, mint 10 éve
1
Operációs rendszerek gyakorlat. 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
b*ismétlés - jelöli a {ε, b, bb, bbb, …} a|b vagy - jelöli a {a, b} halmazt 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 {ε, a, ab, abb, aab,abab, …} b*(ab*)* {ε, b, a, ab, abab, bab, …} a(b|c|d)*{a, ab, ac, ad,abb, abccc,…}
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 !- 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 ‘ Idézőjel” 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‘ echo ”a b” De: itt is van precedencia! Pl.: echo ”$Hello vilag” Eredmény: vilag Mivel a $Hello egy shell változó
10
Speciális karaktert tartalmazó 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. egrep minta(reg.kif.) fájlnév
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 '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 majd 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ő hárombetűs 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 kizárólag az u-val kezdődőekre akarunk illeszteni? Pl. ‘usa‘ jó, de ‘busa’ nem egrep ‘^u.a‘ egrep ‘^u.a$‘
15
Hogyan lehetne az 'u'-val kezdődő és 'a'-val végződő szavakat keresni úgy, hogy a két karakter között bármi lehet, kivéve SPACE (tagadással) egrep 'u[^ ]a'
16
Hogyan lehetne egy vagy több számjegyből álló karaktersorra keresni? egrep ‘[0-9]+‘ Hogyan lehetne pontosan két számjegyből álló számokra keresni? egrep '[0-9] [0-9]‘ egrep '[0-9]{2}’
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 számokra keresni, tehát vagy egész szám vagy egy pontot tartalmazó valós szám? 3.Mi van, ha exponenciális alak is megengedett? 10e-10 4.Hogyan lehetne egy dátumra keresni, mely tartalmazza az evet, a hónapot és a napot számokkal (angol foma)? Pl: 10-28-2009 5.Hogyan lehetne egy programban az 'if' a 'then' vagy 'else' kifejezésekre keresni (pl. programkódban)? 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?
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.