UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - bevezetés Operációs rendszerek 10. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 1 / 15
Reguláris kifejezések Alapvetően mintaillesztés Egy reguláris kifejezés a szövegnek mindig a legkorábban elkezdődő, és ezen belül a leghosszabb részére illeszkedik Az illeszkedő rész a szövegen belül bárhol előfordulhat Alapesetben a kisbetűk és nagybetűk különbözőnek számítanak illesztéskor A reguláris kifejezésekben néhány karakternek speciális jelentése van Érdemes aposztrófok közé zárni A reguláris kifejezésekkel mélyebben a formális nyelvek elmélete foglalkozik Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 2 / 15
A reguláris kifejezések felépítése I Elemi kifejezések: ([kifejezés]): csoportosítás, [kifejezés]-re illeszkedik [[halmaz]]: A halmaz bármely karakterének egy példányára illeszkedik ([halmaz] - karakterek egymás után írása) [[karakter1]-[karakter2]]: mint előbb, de itt egy tartományt adunk meg [karakter1] és [karakter2] között [^[halmaz]]: a halmazban nem szereplő bármely karakter egy példányára illeszkedik.: bármilyen karakter egy példányára illeszkedik ^: a sor elejére illeszkedik $: a sor végére illeszkedik \[karakter]: a \ után írt speciális jelentésű karaktert közönségesként kezeli [karakter]: bármely közönséges karakter saját maga egy példányára illeszkedik ((): az üres szóra illeszkedik) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 3 / 15
A reguláris kifejezések felépítése II Összetett kifejezések: [kifejezés1][kifejezés2] : Összefűzés, konkatenáció - olyan szövegre illeszkedik, amelynek első fele [kifejezés1]-re, második fele [kifejezés2]-re illeszkedik [kifejezés1] [kifejezés2] : Logikai MEGENGEDŐ VAGY - olyan szövegre illeszkedik, amely legalább az egyik kifejezésre illeszkedik ismételt illesztés, ismétlésszám megadása: [kifejezés]*: [kifejezés] akárhány egymást követő példányára illeszkedik (0 is) [kifejezés]+: [kifejezés] legalább 1 egymást követő példányára illeszkedik [kifejezés]?: [kifejezés] 0 vagy 1 példányára illeszkedik [kifejezés]{[szám]}: [kifejezés] pontosan [szám] egymást követő példányára illeszkedik [kifejezés]{[szám],}: [kifejezés] legalább [szám] egymást követő példányára illeszkedik [kifejezés]{[szám1],[szám2]}: mint az előbb, de legfeljebb [szám2] példányra illeszkedik ( [szám1] [szám2] ) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 4 / 15
AWK - bevezetés Olyan szkriptnyelv, amit szöveges állományok feldolgozására terveztek adatvezérelt nyelv: minták és tevékenységek sorozatából áll Elnevezése a megalkotói Alfred Aho, Peter Weinberger és Brian Kernighan családneveinek kezdőbetűiből született Szintaxisa könnyedebb Elérhető MS-DOS operációs rendszer alatt is Három üzemmódja van Interaktív mód - AWK parancs + programkód: nehezen olvasható Interaktív mód - AWK parancs külső fájlból: -f kapcsolóval adható meg a programkód, majd a bemeneti állomány Script mód: az értelmező a végrehajtandó parancsokat egy szöveges állományból olvassa Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 5 / 15
AWK - alapok A fájlok kiterjesztése.awk (konvenció) A script első sora tartalmazza a parancsértelmező fejlécet # jelnek közvetlenül a sor elején kell elhelyezkednie #! /usr/bin/awk f #! /usr/bin/gawk - GNU/Linux alatt ezt használhatjuk Az AWK scripteket hasonlóan kell futtatni mint a BASH scripteket, azonban ezeknek bemeneti állományt is meg kell adni Futtatás: chmod +x [állománynév]: futtatási jog engedélyezése./[elérési út + állománynév] [bemeneti_állománynév]: script futtatása Ha az aktuális mappában van:./[állománynév] [bemeneti_állománynév] Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 6 / 15
AWK - felépítés Alapvetően a bemeneti szöveget rekordokra tördeli egy megadott elválasztó (delimeter) szerint A delimeter lehet karakter, vagy reguláris kifejezés is Az így kapott sorokat ezután változókba letárolja ($1, $2,, $NF) A rekordokat ezután továbbbontja mezőkre egy másik elválasztó szerint Minden AWK forrásprogram szabályok sorozata. A szabály felépítése: [minta]{[akció]} [minta]: egy logikai feltételt fogalmaz meg [akció], avagy tevékenység: különféle utasításokból állíthatjuk össze Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 7 / 15
AWK sorok / rekordok -rwx------ 1 frodo frodo 0 2017-03-28 17:00 1.sh -rwx------ 1 frodo frodo 180 2017-03-28 17:05 SZE.sh -rw-rw-r-- 1 frodo frodo 0 2017-03-28 17:01 2.txt -rwx------ 1 frodo frodo 0 2017-03-28 17:02 3.sh drwxrwxr-x 2 frodo frodo 4096 2017-03-28 17:00 os -rwx------ 1 frodo frodo 0 2017-03-28 17:00 1.sh -rwx------ 1 frodo frodo 180 2017-03-28 17:05 SZE.sh -rw-rw-r-- 1 frodo frodo 0 2017-03-28 17:01 2.txt -rwx------ 1 frodo frodo 0 2017-03-28 17:02 3.sh drwxrwxr-x 2 frodo frodo 4096 2017-03-28 17:00 os sor rekord Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 8 / 15
AWK felépítés, minták I Minden minta egy logikai feltételt fogalmaz meg. Ha a feltétel teljesül egy konkrét rekord esetén, akkor azt mondjuk, hogy a rekord illeszkedik a mintára Elemi minták: BEGIN: pontosan egyszer hajtódik végre, a legelső bemeneti rekord feldolgozása előtt END: pontosan egyszer hajtódik végre, az utolsó bemeneti rekord feldolgozása után. Ezt az awk program befejez ődése követi.![minta]: logikai tagadás ([minta]): csoportosítás /[reg_kif]/: igaz, ha az egész rekord illeszkedik a megadott reguláris kifejezésre [kifejezés]~/[reg_kif]/: igaz, ha a kifejezés mint szöveg illeszkedik a reguláris kifejezésre [kifejezés]!~/[reg_kif]/: az előző tagadása Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 9 / 15
AWK - workflow I A bemenet feldolgozása rekordonként történik - minden rekordot megpróbál illeszteni sorban az összes szabály mintájára, az első szabálytól kezdve Ha a rekord illeszkedett egy szabály mintájára, akkor végrehajtódik a hozzá tartozó akció Az összes szabály ellenőrzése után rátér a következő rekord feldolgozására A szabályok sorrendje fontos, hiszen a mintákra való illeszkedés ellenőrzése, és így az akciók végrehajtásának sorrendje ettől függ Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 10 / 15
AWK - workflow II Akció végrehajtása a BEGIN mintából Sor olvasása az input folyamból Ha a rekord illeszkedik a mintára, akció végrehajtása Nem Fájl vége? Igen Akció végrehajtása az END mintából Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 11 / 15
AWK script Hello World! #! /usr/bin/awk -f BEGIN { print "Hello, world" } hello.awk Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 12 / 15
AWK, grep - feladatok Írj olyan scriptet, ami az ls -l kimenetéből kiszűri a mappákat, és kiírja ezek nevét! (os10_1.awk) Írj olyan scriptet, ami az ls -l kimenetéből kiszűri azokat a szöveges állományokat, melyeknek a nevében az "os" sztring legalább egyszer szerepel! (os10_2.awk) Írj olyan scriptet, ami az ls -l kimenetéből kiszűri azokat a közönséges állományokat, melyekre a tulajdonos rendelkezik végrehajtási joggal! (os10_3.awk) Írj olyan scriptet, ami az ls -l kimenetéből kiszűri azokat a közönséges állományokat, melyekre mindenki rendelkezik végrehajtási joggal! (os10_4.awk) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 13 / 15
AWK, grep - feladatok II Írj olyan scriptet, ami kiszűri a helyes webcímeket a helytelenek közül! Az általunk kitalált fiktív szabályok szerint egy URL a következőképpen néz ki: http vagy https protokollal kezdődik Ezután következik: :// Minden cím www. -al kezdődik, valamint.com,.net, vagy.org -ra végződik A kezdete és a vége között legalább egy hosszú szövegnek kell elhelyezkedni, melyben nem lehet "." os10_5.awk Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 14 / 15
AWK, grep - feladatok III Írj olyan scriptet, ami kiszűri a helyes email címeket a helytelenek közül! Az általunk kitalált fiktív szabályok szerint egy email cím a következőképpen néz ki: az email címek [basename]@[domain].[top-level_domain] alakúak a [basename] csak a következő speciális karaktereket tartalmazhatja:._+-!?, de ezekkel nem kezdődhet! a [domain] csak a - speciális karaktert tartalmazhatja a [top-level_domain] csak kisbetűket és számokat tartalmazhat, valamint hossza 2 és 3 közé kell essen hogy os10_6.awk Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 15 / 15