Operációs rendszerek gyakorlat 2008.11.18.

18
Operációs rendszerek gyakorlat 2008.11.18.

description

Operációs rendszerek gyakorlat 2008.11.18. 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). - PowerPoint PPT Presentation

Transcript of Operációs rendszerek gyakorlat 2008.11.18.

Page 1: Operációs rendszerek gyakorlat 2008.11.18.

Operációs rendszerekgyakorlat

2008.11.18.

Page 2: Operációs rendszerek gyakorlat 2008.11.18.

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)

Page 3: Operációs rendszerek gyakorlat 2008.11.18.

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*)*

Page 4: Operációs rendszerek gyakorlat 2008.11.18.

Reguláris kifejezések

• Shell számára bizonyos karakterek speciális jelentéssel bírnak

• Ezek a meta-karakterek

#\{}|*+

'"

><&^;

!-$[]

Page 5: Operációs rendszerek gyakorlat 2008.11.18.

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

Page 6: Operációs rendszerek gyakorlat 2008.11.18.

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

Page 7: Operációs rendszerek gyakorlat 2008.11.18.

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.

Page 8: Operációs rendszerek gyakorlat 2008.11.18.

Egyetlen karakter védelme

Backslash karakterrelPl.:

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 bEredmény: a bVagyis minden egyes SPACE karaktert meg kell

védeniecho a\ \ \ \ \ b

Page 9: Operációs rendszerek gyakorlat 2008.11.18.

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ó

Page 10: Operációs rendszerek gyakorlat 2008.11.18.

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

Page 11: Operációs rendszerek gyakorlat 2008.11.18.

Fontos!

A grep parancs nem kezeli az összes reguláris kifejezést.

Ennek megoldására használjuk az egrep parancsot!

Szintaxisuk azonos.

Page 12: Operációs rendszerek gyakorlat 2008.11.18.

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 'aa*' test3egrep 'a*' test3egrep 'a+' test3

aa bb ccrr tt yyaaa oooqq wwvv aaaaaxx tt

Page 13: Operációs rendszerek gyakorlat 2008.11.18.

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 ccrr tt yyaaa oooqq ww*vv aaaaa\xx tt

Page 14: Operációs rendszerek gyakorlat 2008.11.18.

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$‘

Page 15: Operációs rendszerek gyakorlat 2008.11.18.

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'

Page 16: Operációs rendszerek gyakorlat 2008.11.18.

Hogyan lehetne egy vagy több számjegyből álló szövegre keresni?

egrep '[0-9]+'

Page 17: Operációs rendszerek gyakorlat 2008.11.18.

Feladatok1. 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?

Page 18: Operációs rendszerek gyakorlat 2008.11.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 '"[^"]"'