Operációs rendszerek gyakorlat 2008.11.18.
-
Upload
axel-meyers -
Category
Documents
-
view
17 -
download
3
description
Transcript of Operációs rendszerek gyakorlat 2008.11.18.
![Page 1: Operációs rendszerek gyakorlat 2008.11.18.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/1.jpg)
Operációs rendszerekgyakorlat
2008.11.18.
![Page 2: Operációs rendszerek gyakorlat 2008.11.18.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/2.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/3.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/4.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/5.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/6.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/7.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/8.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/9.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/10.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/11.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/12.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/13.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/14.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/15.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/16.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/17.jpg)
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.](https://reader035.fdocument.pub/reader035/viewer/2022080917/5681324b550346895d98c0ce/html5/thumbnails/18.jpg)
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 '"[^"]"'