You are on page 1of 59

GNU/Linux segdprogramok hasznlata 1.

0
Terk Zsolt terek@cs.bme.hu 2002. jlius 9.

Copyright c 2001-2002 Linux-felhasznlk Magyarorszgi Egyeslete E kzlemny felhatalmazst ad nnek jelen dokumentum sokszorostsra, terjesztsre s/vagy mdostsra a Szabad Szoftver Alaptvny ltal kiadott GNU Szabad verzijnak felttelei alapDokumentcis Licensz 1.1-es, vagy brmely azt kveto jn. Nem Vltoztathat Szakaszok nincsenek, Cmlap-szvegek nincsenek, a Htlapszvegek neve pedig htlapszveg. E licensz egy pldnyt a GNU Szabad Dokumentcis Licensz elnevezs u szakasz alatt tallja. s szemlyek: A mdostott vltozat kzzttelrt felelo Sri Gbor saga@lme.linux.hu Javtsok: Sri Gbor

Szerz o
Terk Zsolt terek@cs.bme.hu

Szakmai lektor

Nyelvi ellen orzs


Sri Gbor saga@tux.hu A Formzs (L TEX) Sri Gbor saga@tux.hu Ksa Attila atkosa@shinwa.hu

El ozmnyek
Segdprogramok hasznlata
A kiads ve: 2002.

Szerz o
Terk Zsolt terek@cs.bme.hu

Szakmai lektor

Nyelvi ellen orzs


Sri Gbor saga@tux.hu A Formzs (L TEX) Sri Gbor saga@tux.hu Ksa Attila atkosa@shinwa.hu

Tartalomjegyzk
1. Segdprogramok hasznlata 1.1. Bevezets . . . . . . . . . . . . 1.2. Sztringek s specilis karakterek 1.3. Regulris kifejezsek . . . . . . 1.4. Alapvet o m uveletek . . . . . . . 1.5. Karakterosztlyok . . . . . . . . 1.6. Regulris kifejezsek hasznlata 1.7. Vltozatok, kiterjesztsek . . . . 1.8. Pldk . . . . . . . . . . . . . . 2. Az ed szvegszerkeszt o 2.1. Cmzs . . . . . . . . . . . . . 2.2. Parancsok . . . . . . . . . . . . 2.3. Regulris kifejezs sajtossgok 2.4. Indts parancssorbl . . . . . . 2.5. Pldk . . . . . . . . . . . . . . 4 4 5 7 7 8 8 9 9 11 12 12 16 16 16 18 19 20 20 21 22 23 23 28 28 29 46 46 46

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

3. sed, a folyamszerkeszt o 3.1. Cmzs . . . . . . . . . . . . . . . . 3.2. Parancsok . . . . . . . . . . . . . . . 3.2.1. Gyakori parancsok . . . . . . 3.2.2. Ritkbban hasznlt parancsok 3.2.3. Tovbbi parancsok . . . . . . 3.3. Regulris kifejezs sajtossgok . . . 3.4. Pldk . . . . . . . . . . . . . . . . .

4. Az awk nyelv 4.1. ttekints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Az awk nyelv elemei . . . . . . . . . . . . . . . . . . . . . . 5. Perl 5.1. A Perl nyelv elemei . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1. Vltozk . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1. fejezet

Segdprogramok hasznlata
1.1. Bevezets
segdJelen fzet bevezetst kvn nyjtani a Linux opercis rendszerekben elrhet o knt szvegfeldolgozsra hasznlhat programok hasznlatnak megismershez. Fo programozsi nyelvek s eszkzk ezek, amelyek a hetvenes vek UNIX rendszereinek vltozataik terjedtek el, amelyeket vgl a POSIX tervezsekor szlettek. Klnbzo szabvny ltrehozsa sorn egyestettek. A Linuxba a GNU vltozatok kerltek, amelyek teljes egszben kompatibilisek a POSIX szabvnnyal, s nhol kiegsztseket is tartalmaznak. szoftver csoA GNU projekt clja, hogy ingyenesen, brki szmra hozzfrhet o magot hozzanak ltre. Ezt az Free Software Foundation (FSF) szervezet irnytja. Pro k, s gramjaik klnbz o rendszerekben is hozzfrheto ot, azok forrskdjt is brki megnzheti, mdosthatja, felhasznlhatja. Egyedli megszorts, hogy a mdostott v kell tenni. Ez a vltozatot is ugyanilyen felttelekkel mindenki szmra elrhet o GNU Public Licence (GPL). A GNU egybknt egy rekurzv rvidts: GNU is Not Unix. A msodik fejezet a regulris kifejezseket ismerteti. Ezek a matematikai formlis nyelvszet eredmnyeinek felhasznlsval rendkvl knyelmes, jl hasznlhat segdeszkzt jelentenek szveges adatok vizsglathoz, elemzshez s feldolgozshoz. sgeket. Valamennyi segdprogram kihasznlja a regulris kifejezsek nyjtotta lehet o t mutatja be. Ez nmileg eltr a A harmadik fejezet az ed nev u szvegszerkeszto szvegszerkeszt ok mai fogalmtl, de annak idejn nem is pontosan ilyen clok ve re, de ha a megfelel zreltk kiagyalit. Nehzkesnek s nyakatekertnek t unhet els o o helyen s a megfelel o feladatokra hasznljk, j szolglatot tehet. Ezrt is nlklzhe ben. tetlen bemutatsa egy ltalnos ismerteto sen hasonlt, de alkalmazsi cljaiA negyedik fejezetben az ed-re megleheto ban klnbz o szvegfeldolgoz segdprogram, a sed hasznlatval foglalkozunk. A t a UNIX-szer stream editort, vagyis a folyamszerkeszto u rendszerek szmos szkriptje is gyakran segtsgl hvja, ha egyszer ubb szvegkonverzik vgrehajtsa szksges. Amellett, hogy hasznos, mg rendkvl szellemes is lehet egy-egy sed nyelven rt, pr karakterb ol ll programocska. Az tdik fejezet az awk programozsi nyelv rszleteibe vezeti be az olvast. Az awk nyelv is alapjba vve szvegmanipulcis clokra lett tervezve, de azrt itt mr

l lehet komolyabb programozsi szerkezetek is vannak, amelyek legtbbje a C nyelvb o l is. ismer os. Ugyanakkor sokat rklt a sed s az ed szemlletbo A hatodik rsz a Perl bemutatsra hivatott. A Perl mra mr univerzlis programozsi nyelvv fejl odtt: modularizlt, objektum-orientlt s akr grakus fellet programozsra is alkalmas. tfog ismertetse tlmutat ezen fzet keretein, mind z ssze azon aspektusait vizsgljuk, amelyek az elo o fejezetek ismeretben knnyen s gyorsan megrthet ok. A fejezetek felptsre jellemz o, hogy el oszr ltalnos ttekintst adnak a bemu rszek, amelyek akr referenciaknt is szolglhattatott dologrl. Az ezutn kvetkezo olvassra nehezebbnak, sorban bemutatjk az adott segdprogram funkciit. Ez els o nek t unhet, de ez nem baj, esetleg tbbszr tfutva sszell majd a kp. Vgl alkal z mazsi pldkkal zrjuk a fejezetet, amelyek az elo oleg bemutatott anyag gyakorlatba ltetst illusztrljk. A pldk mell f uztt megjegyzsek segthetnek azoknak, akik szkripteket. a rszletes ismertet o el ott szvesebben bngszik a m ukdo

1.2. Sztringek s specilis karakterek


Ha egy karaktersorozatot szeretnnk egy programnak megadni, azt nem biztos, hogy pontosan ugyangy kell lernunk. Tekintsk a parancssori programindts pldjt. Ennek hagyomnyos formja: programnv par1 par2 ... parn vagyis a program neve utn szkzzel elvlasztva, nhny paramtert sorolunk fel. leA paramterek karaktersorozatok, vagyis sztringek, m nem tartalmazhatnak tetsz o ges karaktereket. Pontosabban, nem olyan egyszer uen. re vonatkoznak. Ez taln a leAz itt vzolt szablyok a bash parancsrtelmezo gelterjedtebb shell, ezrt ennek a karakterkezelst mutatjuk be. Mshol is nagyon hasonl mdon bnnak a specilis karakterekkel, legalbbis az irnyelvek ugyanezek. paramtereknt egy tbb Kpzeljk el azt a helyzetet, hogy programunk elso szbl ll sztringet szeretnnk megadni. Ha ezt programnv els o paramter nek, hogy nem kt paraalakban rjuk, honnan kellene tudnia a parancsrtelmezo az a sz, hogy els mterrel hvjuk a programot, ahol az elso o, a msodik pedig az, hogy paramter? A helyzet nyilvn nem egyrtelm u, viszont a bash valahogy mindig rtelmezi, mghozz kvetkezetesen: a szkz elvlasztja a paramtereket. Valamilyen ms, cselesebb mdon kell megfogalmazni eredeti akaratunkat. Az egyik karakternek specilis jelentse van. Ez, csakgy mint legtbb ms nyelvben a backslash, vagyis a fordtott perjel: \. Ha ezt a karaktert olvassa a bash, karakter nem sajt magt jelli, akkor tudni fogja, hogy sem ez, sem a kvetkezo l tvve szoks ezeket hanem valamilyen metajelentse van. Az angol nyelvbo karaktert egyttvve.) escape-szekvenciknak nevezni (A backslash-t s az azt kvet o Egy backslash s egy szkz egyttvve olyan szkzt jelent, amely rsze a paramternek. Teht az el obbi parancssor helyesen: programnv els o~paramter

Arra a krdsre, hogy miknt lehet backslash karaktert rni egy paramterbe, egyszer u a vlasz: kt backslash egy igazi backslash-t jelent. Ezen kvl a n az jsor karakter megfelel oje, a t pedig a tabultor. Ha olyan karakter szerepel a backslash utn, amelyhez nem tartozik klnleges escape-szekvencia, akkor egyszer uen az adott karakter kerl a helyre. Ugyancsak elterjedt konvenci, hogy backslash-re egy sor vgn azt jelenti, hogy a kvetkez o sort is tekintse az rtelmez o ezen sor folytatsnak. (Termszetesen a jelzo karakter elvtelvel.) A shell szmra a dollrjel is klnleges jelentssel br. Segtsgvel hivatkozhatk a megfelel o nev u krnyezeti vltozk. Ezek ltalban arra hasznlhatk, hogy a programok a rendszer kongurcijrl informcit szerezzenek. Pldul $PATH egy sponttal elvlaszta fel vannak sorolva azon olyan sztringet tartalmaz, amelyben ketto knyvtrak, ahol a futtathat programok nagy rsze elhelyezkedik. Termszetesen, ha a dollrjelet szeretnnk hasznlni klnleges rtelmezs nlkl, egy backslash elrsval ezt is megtehetjk. jelek hasznlata. Az egyik fajta a Paramterek speciklst segthetik az idzo kett os idz ojel ("). Kt ilyen jel kz rt karaktereket egyetlen paramternek tekinti a shell, teht gy is megoldhat a szkz hasznlata: programnv "els o paramter" msodik Persze maguk az idz ojelek nem rszei annak a sztringnek, amit paramterknt megkap a hvott program. Ilyen macskakrmk (double quotes) kztt rvnyesek az en lehet escape-szekvencik, vagyis a backslash specilis jelents u. Ennek ksznhet o azt hinn, ez mr a pldul " karaktert rni a paramterbe anlkl, hogy az rtelmez o lezr macskakrm. programnv "Egy idzet:\n"Minden egr szereti a sajtot.\"" jellel Ez valjban egy ktsoros sztringnek felel meg, amely msodik sora idz o kezd odik s vgz odik. Egyszeres idz ojelek, aposztrfok () is alkalmasak szveg keretezsre. A legfontosabb eltrs azonban az, hogy ebben mr nem rvnyes a vagy a $ karakterek specilis jelentse. Minden karakter sajt magrt ll a szvegben. Ennek kvetkeztben nincs md aposztrf hasznlatra, hiszen az mindenkpp zr aposztrfknt kerl rtelmezsre. Viszont cserbe nem kell gyelni a szkzkre, klnleges karakterekre. Ha tbb soros paramtert akarunk megadni a parancssorban, ENTER-t is hasznlhatunk:
programnv Tbb soros paramter, > enter nyomsa utn sem lesz > vge a parancssornak, > csak ha lezrjuk egy aposztrffal. msodik

A sorok elejre a > jelet a shell rta ki, jelezve, hogy tbbsoros parancsot adunk ki. jelek (backquoMg egy nagyon rdekes tulajdonsg htra van. Ha fordtott idz o tes: ) kz rt szveg szerepel valahol, a shell azt futtatand parancsknt rtelmezi. Vgrehajtja, majd a futs sorn kapott kimenetet helyettesti a jelekkel hatrolt rszre. Pldul a programnv ls az ls program kimenetvel, vagyis az aktulis knyvtr tartalmnak listjval, mint paramterekkel hvja meg az adott programot. Ez ekvivalens azzal, hogy programnv dir1/ dir2/ file1 file2 file3 Makrszer usgr ol van sz, teht ha a behelyettestett szveg szkzket tartalmaz, az para6

mterelvlasztknt kerl rtelmezsre. Ha egyetlen paramterknt szeretnnk a teljes listt tadni, akkor azt programnv ls formban kell rni, mivel ez megfelel az albbi formnak: programnv "dir1/ dir2/ file1 file2 file3" jelek kztt a fordtott aposztrf is elveszti klnleges Nyilvnvalan egyszeres idzo hatst.

1.3. Regulris kifejezsek


tt nhny szt kell ejteni a Az egyes segdprogramok szintaktikjnak megismerse el o regulris kifejezsekr ol. A regulris kifejezs egy karaktersorozat, amely egy szhalmazt jell. Pldul a * a csak a bet ut tartalmaz szavakat jelenti. A regulris kifejezsekben bizonyos karakterek jelentse specilis. Ha azonban mgis egy ilyen karaktert szeretnnk hasznlni, akkor egy fordtott per jelet (backslash, ) kell elrni. Nyilvnvalan magra a backslash karakterre annak megduplzsval hivatkozhatunk: .

1.4. Alapvet o muveletek


l llnak, a . (pont) pedig tetA legegyszer ubb regulris kifejezsek egyetlen bet ubo sz oleges karaktert jelent, kivve a sorvget. (A sorvg is egy specilis karakter a l sszetettebb rendszer szmra.) Ha most reg1 s reg2 regulris kifejezs, ezekb o kifejezseket a kvetkez o szablyok segtsgvel pthetnk: reg1reg2 A konkatenci, vagyis egyms utn rs olyan szavaknak felel meg, amelyeket a reg1 s a reg2 ltal lert szhalmazok egy-egy szavnak egyms utn rsval kaphatunk. Pldul a. az a s a . kifejezsek konkatenltja, teht olyan karaktere a, a msodik pedig tetszo leges. ktbet us szavak halmaza, amelyek elso reg1|reg2 Ezzel a kt halmaz unijt kpezzk, teht akr az egyik, akr a msik kifejezs ltal lert szavak megfelelnek. Pldul az ab|a halmaz kt szt tartalmaz, ab-t s a-t. leges reg1* Az ismtls opertorval minden olyan szt megkaphatunk, amely tetsz o reg1-beli szavak egyms utn rsval kaphat. Az ismtlsek szma nulla is lehet, teht ennek a halmaznak eleme az res sz. Pldul a*b* olyan szavakat jell, amelyekben nhny a bet ut nhny b kvet. Megengedett az is, hogy csak a, vagy csak b bet ut tartalmazzon a sz. reg1+ Az el oz ohz nagyon hasonl m uvelet, de itt az ismtlsek szma legalbb egy. dnek, s b-re vgz Teht az a+b+ halmaz szavai mindenkpp a-val kezdo odnek. tte ll reg1? Ide reg1 szavain kvl az res sz tartozik, teht a ? opertorral az el o kifejezst opcionliss tehetjk. A regulris kifejezsek gyakorlsa rdekben gondoljuk vgig az albbiak azonossgt: reg*, reg+?, reg?+. k (*, +,?) m Az emltett opertorok kzl az ismtlo uveleti els obbsg szempontjbl er osebbek a konkatencinl, mg a leggyengbb az alternls (|). Az azonos

dnek ki. Gmbly er ossg u opertorok balrl jobbra rtkelo u zrjelekkel fellbrlhatk az el obbi szablyok. Az ismtl odsek szmt tovbb szablyozhatjuk. Ha reg egy kifejezs, akkor dik. Als s fels reg{m} jelentse az, hogy reg pontosan m-szer ismtlo o korlt ad. A hat az ismtl odsek szmra: reg{m,n} legalbb m, legfeljebb n ismtlst r elo fels o korlt elhagysa (a vessz o megtartsval) tetsz oleges m-nl nagyobb ismtl odst megenged.

1.5. Karakterosztlyok
Tovbbi knyelmi lehet osget jelent a karakterosztlyok hasznlata. Szgletes zr bet jelek ([ s ]) kztt megadott karaktersorozat brmelyik benne szerepl o unek felel meg. Kt ojellel intervallumokat is megadhatunk, teht [abcde] s [a-e] ugyanaz. Pl bet dul [A-Z][A-Za-z]+ olyan legalbb ktbet us szavakat r le, amelyek kezd o uje nagy, fordulhatnak. a folytatsban pedig nagy- s kisbet uk egyarnt elo dik (), akkor a jelents az ellentettje lesz: Ha a karakterosztly kalap-jellel kezdo azok a karakterek felelnek meg a kifejezsnek, amelyek nem szerepelnek benne, in dnek s tervallumknt sem. Teht a[a]*a olyan szavakat jelent, amelyek a-val kezd o vgz odnek, de a belsejkben nincs ilyen karakter. Karakterosztlyokon bell el ore denilt csoportokat hasznlhatunk. Ezek: alfanumerikus karakterek, azaz bet uk, szmok s az alhzs ([:alnum:]), bet uk ([:alpha:]), vezrl o karakterek ([:cntrl:]), szmjegyek ([:digit:]), kisbet uk ([:lower:]), karakterek ([:print:]). Fontos, nagybet uk ([:upper:]), nyomtathat, teht nem vezrlo hogy ezek nllan nem karakterosztlyok, csak ha maguk is szgletes zrjelek kztt fordulnak el o. gy pldul [0-9] ugyanaz, mint [[: digit:]], de [a-zA-Z] abban bbi csak az angol bc bet klnbzik [[:alpha:]]-tl, hogy az elo uit ismeri. Szgletes zrjelek kztt hrom karakternek van specilis jelentse. Ha ezeket karakter, ] viszont sajt maguk jelentsre szeretnnk haszni, akkor ne legyen az els o csak a legels o helyen kerl karakterknt, s nem bezr zrjelknt rtelmezsre. A kt ojel legyen a legutols. Pldul []-] szablyos karakterosztly.

1.6. Regulris kifejezsek hasznlata


A regulris kifejezs karaktersorozatok egy halmazt jelenti. Azt mondjuk, hogy egy r regulris kifejezs minta (pattern) illeszkedik (matches) egy karakterlncra, ha az r ltal fordul az emltett karakterlncban. gy meghatrozott halmaz szavainak brmelyike elo fordul az pldul akrmi illeszkedik minden olyan karaktersorozatra, amelyikben el o akrmi rszsorozatknt. egy regulris kifejeEl ofordulhat, hogy egy szvegre tbbflekppen is illeszthet o zs. Attl lesz egyrtelm u az illeszkeds, hogy mindig a legbaloldali, vagyis a legels o illeszts az rvnyes. Ha ilyenb ol is tbb van, ezek kzl a leghosszabb szmt. Pl l kezdve pontosan hrom dul a bc* minta a abccbbc szvegre a msodik karakterto karakteren keresztl illeszkedik. rjuk, az el Az illesztsen szigorthatunk gy is, hogy elo oforduls csak a szveg dik, az elejn vagy csak a vgn trtnhet. Ha a regulris kifejezs kalap jellel kezd o dhet, mg ha dollr jelet runk egy kifejezs vgre, illeszts csak a szveg elejn kezdo akkor sikeres illeszkeds esetn a rszsorozat a szveg vgig tart. Pldaknt tekintsk sgt: az a+ kifejezs mdostsainak leheto

a+ mindenre illeszthet o, amiben el ofordul legalbb egy a bet u a+ csak az a-val kezd od o szvegekre illeszthet o a+$ az a-ra vgz od o karakterlncokra illik a+$ a csupa a bet ub ol ll szavak felelhetnek meg A grep segdprogram hasznlata teljes egszben a regulris kifejezsekre pl. A szabvnyos bemenetn olvasott fjl minden sorra megvizsglja, illeszkedik-e a paramterknt kapott minta. Amely sorok esetben sikerlt az illeszts, azokat kirja a kimenetre. Persze nmagban ez a program gyakorlatilag hasznlhatatlan, de ms egyszer u parancsokkal egytt rendkvl ltalnos feladatokat vgezhet. dik Egyszer u pldaknt keressk meg azon fjlokat, amelyek neve b bet uvel kezd o s ugyangy vgz odik! Az ls parancs kirja az sszes llomny nevt az aktulis l: knyvtrbl, ezt sz urjk a grep segtsgvel, alkalmazva a ^b.*b$. (Emlkeztet o a pont brmilyen karakterre illeszkedik.) ls | grep ^b.*b$

1.7. Vltozatok, kiterjesztsek


vltozata is elterA regulris kifejezsek szintaktikjnak sajnos szmos, klnbz o rizzk, a kifejezst rtelmez jedt. Ezrt fontos, hogy adott helyzetben elleno o program manual oldalak. melyik nyelvjrst ismeri. Erre a legalkalmasabbak a megfelel o l. Ugyancsak ott kaphatunk rszletes informcit az alkalmazhat kiterjesztsekr o A klnbz o vltozatok kztt nhny rgebbi fordtva kezeli a zrjelezst s zrjel karaktereket. Ez azt jelenti, hogy a gmbly u s a kapcsos zrjel hagyomnyos bbsgek miatt karakternek tekintend o, s specilis karakterknt (amikor is m uveleti elso ) backslash-t kell eljk rni. zrjeleznk, vagy korltozott szm ismtlst runk elo A stream editor (sed) ezt az rtelmezst kveti. sgekkel tallkozhatunk, illetve bizonyos kiterSok helyen tovbbi knyelmi leheto sgnl jesztsek is lteznek, amelyekkel az egyszer u regulris kifejezsek adta lehet o tbb is megfogalmazhat. A legfontosabb ilyen kiterjeszts a hivatkozs. A zrjelek nemcsak a m uveletek sorrendjnek szablyozsra alkalmazhatk, hanem a regulris rszkifejezs. kifejezs illesztsekor a szveg egy rszre illeszkedik a zrjelben lv o kkel: Az els o kilenc zrjel ltal illesztett rszek hivatkozhatunk vissza a kvetkez o $1, $2,..., $9.Ezzel ismtl odst rhatunk el o az illesztett szvegben. Pldul \^(.*)$1$ egyszer uen azokra a szvegekre illik, amelyek valamilyen szveg megismtlsvel kaphatk (baba, dada). A sed ett ol eltr oen, dollr helyett backslash karaktereket hasznl a visszahivatkozsra.

1.8. Pldk
Nhny egyszer u regulris kifejezs a hozzf uztt magyarzattal segthet a megrtsben. a*b nulla vagy tbb a, melyeket egy b kvet a?b nulla vagy egy a karakter, melyet egy b kvet 9

a+b+ legalbb egy a, melyet legalbb egy b karakter kvet .* egy akrmilyen sor sszes karaktere .+ illeszkedik minden nemres sorra (mivel legalbb egy nem sorvg karakternek kell lennie az illeszked o szvegben) dnek, s szerepel benmain.* olyan sorokra illeszkedik, melyek main szval kezd o nk egy nyit-csuk zrjel pr valahol

# a # karakterrel kezd od o sorok, melyek legtbb szkript-nyelvben a kdhoz f uztt megjegyzst jelentik l u karakterro $ backslash karakterre vgz od o sorok (kt kell, mert specilis jelents van sz) .0,15A Ez olyan sorokra illeszkedik, amelyek tizenhat karaktere kztt van A bet u. A regulris kifejezsek illeszkedsnl legbaloldalibb, leghosszabb szablya miatt ilyenkor az illeszkeds az 16 karakter utols A bet ujig tart. Teht a .0,15 rsz olyan hosszra nylik, amilyenre csak tud, ha tbb illeszkeds is lehetsges.

10

2. fejezet

Az ed szvegszerkeszt o
, amely segtsgvel ltrehozhatunk, mdoAz ed egy sor szemllet u szvegszerkeszto l. Mivel ez a Unix sthatunk szveges fjlokat mind interaktv mdon, mind szkriptb o . Ennek ellenre rendszerek eredeti szvegszerkesztoje, szinte mindenhol hozzfrheto legtbb esetben valamely teljes kpernyos szvegszerkeszt ot clszer ubb hasznlni. Kivtelt jelentenek az olyan feladatok, ahol pldul sok fjlon kell olyan mdostsokat vgezni, amelyeket nehzkes volna interaktvan megcsinlni, viszont knnyen algoritmizlhatk. Az ed kt alapvet o m ukdsi mddal rendelkezik, ezek a parancs s a beviteli mdok. Parancs mdban megadott utasts hatsra, amennyiben szveget szrunk be, beviteli mdba vlt. Beviteli mdban maradunk addig, amg vgl egy mindssze egyetlen pontot tartalmaz sort gpelnk be. Ilyenkor visszakerlnk parancs mdba. Pldul az a parancs (append) az aktulis sor utn szrja a megadott szveget.
ed a Ezeket a sorokat a pufferbe rja. Egszen eddig tart. . ,p Ezeket a sorokat a pufferbe rja. Egszen eddig tart. Az ,p utastssal kilistzhatjuk a puffer teljes tartalmt.

: A parancsok ltalnos formja a kvetkezo [cm [,cm]] parancs [paramterek] Egy vagy kt cm megadsval a parancs vgrehajtsnak helyt, illetve intervallumt adhatjuk meg. Amennyiben nem adunk meg cmzst, az aktulis sor vagy in l ll, tervallum lesz az, amin a m uvelet vgrehajtsra kerl. A parancs egyetlen bet ub o amelyet paramterek kvethetnek. Az aktulis sor, amelyen a cmzs nlkli parancsok alaprtelmezs szerint dolgoznak, a m uveletek vgrehajtsa utn megvltozik. ltalban a legutoljra megvl l van sz. Az toztatott sor lesz aktulis, kivve azokban az esetekben, amikor trlsr o egyes parancsok lersnl erre mg kitrnk. Kzvetlenl indts utn a beolvasott fjl utols sora lesz az aktulis. 11

2.1. Cmzs
Az ed szvegszerkeszt oben a cmzssel egy sort jellhetnk ki a pufferben. Ezzel adjuk meg, hogy a parancsok a szveg mely rszein vgezzenek mdostsokat. A parancs el ott vessz ovel vagy pontosvessz ovel elvlasztott cmlista utols egy en, hogy egy soron, vagy egy intervagy kt cmt hasznlja fel a parancs attl fggo vallumon dolgozik. Az albbi mdokon adhatunk meg cmeket: . A puffer ppen aktulis sora. $ A puffer utols sora. n A puffer n-dik sora, ahol n 0 s $ kztti rtk. - vagy Az aktulis sort megel oz o sor. Hatsa -1-gyel egyez o, s tbbszrsen alkalmazhat. z -n vagy n Az aktulis sort n-nel megelo o sor, ahol n nemnegatv egsz. + A kvetkez o sor. Ekvivalens +1-gyel s tbbszrsen alkalmazhat. +n vagy szkz n Az aktulis utni n-dik sor, ahol n nemnegatv egsz. Szkzt kvet o szm ugyangy rtelmezhet o. , vagy % A puffer els o sortl az utolsig tart intervallum. Ugyanaz, mint 1,$ ; Az aktulis sortl az utols sorig tart intervallum. Ugyanaz, mint .,$ olyan sor, amelyre illeszkedik a megadott /re/ Az aktulis sortl indulva a kvetkezo regulris kifejezs. A puffer vgre rve a keress az elejn folytatdik. Az el oz o keress megismtelhet o megadsval. olyan sor, amelyre illeszke?re? Az aktulis sortl kezdve visszafel indulva az elso dik a megadott regulris kifejezs. A puffer elejre rve a keress a legutols z sortl folytatdik, ily mdon krbe-krbe is lpkedhetnk a pufferben. Az el o o keress megismtelhet o megadsval. Teht ha egy bonyolult regulris kifejezs alapjn keresnk, majd mg egyszer megismtelnnk ezt a keresst, nem kell jra begpelni az el oz o kifejezst, hanem egyszer uen megismtli azt. ltal mutatott hely, ahol b a knyvb Az el oz oleg k paranccsal elhelyezett knyvjelzo jelz ot azonost kisbet u.

2.2. Parancsok
l ll, amely utn paramtereket adhatunk t. Ha Minden parancs egyetlen karakterbo tbb sorba akarjuk trdelni a paramtereket, az utols sor kivtelvel mindegyik backs djn. Ezzel olyan hats rhet lash karakterre kell, hogy vgzo o el, mintha az sszes sor karaktereket. egyetlen parancssor volna, kivve persze a sorvget jelzo ltalban egyetlen parancs szerepel egy sorban. Kivtel lehet nhny, amelyek megengedik p, l vagy n hozzrst a parancshoz, mellyel a vgrehajts utn informcit szerezhetnk az utols mdostott sorrl. tt zrjelben felAz ed a kvetkez o parancsokat ismeri. A parancsok megadsa elo tntettk az alaprtelmezsknt hasznlt cmet vagy intervallumot, amelyet a parancs hasznl, ha a felhasznl semmit sem ad meg. 12

(.)a (append) A megcmzett sor utn rja azt a szveget, amelyet a parancs vgrehajtsa utn beviteli mdban megadunk. Lehetsges 0 cm megadsa, ilyenkor az els o sor el kerl a beszrt szveg. A vgrehajts utn az aktulis sor az utols beszrt sor lesz. dik, s helyre az el (.,.)c (change) A megcmzett sor vagy intervallum trlo oz o parancsnl lertakhoz hasonlan bekerl a beviteli mdban megadott szveg. Az aktulis sor az utols beszrt sor lesz. (.,.)d (delete) Trli a megadott sorokat. Ha az aktulis sor is a trltek kztt van, akkor a trlt rszt megel oz o sor lesz aktulis, egybknt nem vltozik. z e fjlnv (edit) Megnyitja a megadott fjlt, a pufferbe helyezi, annak el o o tartalmt fellrva. Ha nem mentettk a puffert az utols mdosts ta, gyelmeztetst kapunk. e !parancs A puffer tartalmt fellrja a megadott parancs vgrehajtsakor a szabvnyos kimenetre rt adatokkal. E fjlnv Felttel nlkl megnyitja a megadott fjlt. Az e-hez hasonl, de itt elvesznek a nem mentett mdostsok. f fjlnv Az alaprtelmezs szerinti fjlnv belltsa. (1,$)g/re/ parancs-sorozat Minden sorra, amelyre a megadott regulris kifejezs il tt leszkedik, vgrehajtja a parancs-sorozat utastsait gy, hogy a vgrehajts el o az aktulis sor az illeszked o sor lesz. Vgl az utols mdostott sor vlik aktuliss. A parancs-sorozat minden utastsa kln sorban kell, hogy szerepeljen, s az dnie. Tetutolst kivve minden sornak backslash (\) karakterre kell vgz o sz oleges parancs megengedett, kivve g, G, v s V. res sor a parancssorozatban megfelel egy p parancsnak. Ha az ed-et -G opcival indtottuk, akkor az res sorok +1p-nek felelnek meg. (1,$)G/re/ Interaktv mdon szerkeszti a megcmzett rsz azon sorait, amelyekre illeszkedik a megadott regulris kifejezs. Minden egyes tallat esetn az aktulis sor arra a sorra lltdik, s a felhasznl megadhatja az azon a soron vgrehajtand parancsot az el oz oekben ltott parancs-sorozat formjban. A G parancs befejeztvel az utoljra mdostott sor vlik aktuliss. jsor karakter res parancs-sorozatnak felel meg, mg egyetlen & bersval az meg. el oz o nem res parancs-sorozat ismtelheto H Hibazenetek kirst vltoztatja. (igen/nem kztt) h (help) Az utols hiba magyarzatt rja ki. (.)i (insert) Szveget szr be az aktulis sor el. Az aktulis sor a legutols bert sor lesz. dik, s helyette az (.,.+1)j (join) Egyesti a megadott sorokat. A kijellt rsz trlo dnek.) egyetlen sorknt, a trlt sorok egyestse kerl be. (Sorvg jelek trl o Az gy kapott sor lesz aktulis.

13

(.)kb Elhelyez egy knyvjelz ot, amelyet a kis b bet uvel jell. Erre hivatkozhatunk nem trl cmzsnl b formban. A knyvjelzo odik amg az ltala mutatott sort t. Mivel a knyvjelz nem trljk, vagy fell nem rjuk magt a knyvjelzo oket egyetlen karakter azonostja, amely csak kisbet u lehet, sszesen 26 knyvjelz o hasznlhat egyszerre. (Csak az angol bc bet ui megengedettek.) re (.,.)l (list) Kirja a megadott sorokat, dollrjellel jelezve azok vgt. Ha a kperny o nem fr ki egy sor, azt j sorban folytatja, de a trst backslash karakterrel jelzi. A 128-nl nagyobb kd karakterek (pl. kezetes magyar bet uk) backslash utn als sort elri, oktlis kdjukkal kerlnek a kirsra. Ha a terminl kpernyo jsor karakterre vr a tovbbi rsig. Aktuliss vlik a legutoljra kirt sor. sorokat a paramterknt kapott cm(.,.)m(.) (move) A megadott intervallumban lvo mel jelzett sor mg mozgatja. Az utoljra mdostott sor lesz aktulis. Ha a paramterknt kapott cm 0, akkor a puffer elejre kerl a mozgatott szveg. (.,.)n (numbered print) A megadott sorokat sorszmozva kirja. Hasonlan a tbbi kir parancshoz, az utoljra megjelentett sor lesz aktulis. (.,.)p (print) A megadott sorokat kirja mindenfle egyb karakter nlkl. Ha a terminl kperny o als sort elri, jsor karakterre vr a tovbbi rsig. prompt kijelzst vltoztatja igen/ nem P A parancsmdban a sor elejn megjeleno kztt. Hacsak indtskor nem adtunk meg prompt szveget -p szveg formban, alaprtelmezs szerint nem jelenik meg semmi. q (quit) Kilps az ed-b ol. Mdostott puffer esetn gyelmeztetst kapunk. Q Felttel nlkli kilps. ($)r fjlnv (read) A megadott fjlt beolvassa s a megcmzett sor utn beszrja a pufferbe. Ha volt alaprtelmezett fjlnv, akkor az marad, klnben az j fjl neve lesz alaprtelmezett. Ha nem adunk meg fjlnevet, az alaprtelmezett fjl kerl beszrsra. ($)r ! parancs Az el oz ohz hasonlan, a parancs vgrehajtsnak szabvnyos kimenete kerl a puffer megadott helyre. Az alaprtelmezett fjlnv vltozatlan marad, az aktulis sor az utols beszrt sor lesz. (.,.)s/re/csere/, (.,.)s/re/csere/g, (.,.)s/re/csere/n (substitution) A megadott sorok kzl rszt kicseazokban, melyekre illeszkedik a re regulris kifejezs, az illeszked o rli a csere alatt megadott szvegre. Ebben lehetnek hivatkozsok az illesztett regulris kifejezs rszkifejezseire 1, 2, ..., 9 formban. A teljes illesztett rszre hivatkozhatunk & jellel. , hanem az sszes illeszkeds esetn A parancs utni g hatsra nem csak az elso megtrtnik a csere. Ha pedig egy szmot runk n helyre, akkor az annyiadik illeszkedsnl hajtdik vgre a csere. Hibajelzst kapunk, ha nem trtnik illeszkeds egy sorra sem. Az aktulis sor az utoljra mdostsra kerl o sor lesz. Ez taln a leghatkonyabb m uvelet, amelyik a teljes kperny os szvegszerkeszt okb ol hinyzik. A sed s a perl is tartalmazza lnyegben ugyanezt az utastst, kisebb mdostsokkal. A pldknl rszletesen bemutatjuk hasznlatt.

14

(.,.)s Megismtli az el oz o csert. (.,.)t(.) (transfer) tmsolja a megadott rszt a paramterknt kapott cmre. Hasonl m-hez, de nem trli a forrst. u (undo) Az el oz o m uvelet rvnytelentse. A g, G, v s V m uveleteket egyetlen m uveletnek tekinti. Hatst egy jabb u visszavonja. (1,$)v/re/ parancs-sorozat M ukdse hasonl g-hez, kivve, hogy a nem illeszked o sorokon hajtja vgre a m uveleteket. (1,$)V/re/ Interaktvan vgzi ugyanazt, mint v, analg mdon, mint G. z (1,$)w fjlnv A megadott fjlba rja a kijellt rszeket. A fjl elo o tartalma elvsz. Ha nem volt alaprtelmezs szerinti fjlnv, akkor az felveszi a megadott rtket, klnben vltozatlan marad. Ha nem adunk meg fjlnevet, az alaprtelmezett fjlba r. . (1,$)wq A w parancs s egy utna bert q hatsval egyezo (1,$)w !parancs Elindtja a parancs-ot, s a kijellt sorokat annak bemenetre kldi. (1,$)W fjlnv Hozzrs trtnik a megadott fjlhoz. (.)x A vglap tartalmt beilleszti a megadott helyre. (.,.)y (yank) A kijellt rszeket a vglapra msolja. (.+1)z n Az megadot sortl kezdve n sort kir, s az utolsra lltja az aktulis muta szm lesz az tt. Ha nem adunk meg n-et, akkor az ablak mretnek megfelel o alaprtelmezs. segtsgvel. Ha ! parancs Vgrehajtja a megadott parancsot az sh parancsrtelmez o a parancs els o karaktere !, azt az el oz o paranccsal helyettesti, ha pedig szzalkjel szerepel a parancsban, azt az aktulis fjlnvre cserli. Valdi szzalkjelet pedig % segtsgvel rhatunk. A futs eredmnye a kperny ore kerl, annak befejeztt egy egyetlen ! jelet tartalmaz sor jelzi. Az aktulis fjlnv s az aktulis sor vltozatlan. (.,.)# A # jel utni rsz megjegyzs (komment), vagyis az ed gyelmen kvl hagyja. Ha el otte pontosvessz ovel lezrt cm volt, az lesz az aktulis sor. ($)= A megcmzett sor szmt rja ki. (.+1) Kirja a megcmzett sort, majd az lesz az aktulis. dik a Tbb helyen lthattuk, hogy fjlm uveleteknl, ha ott felkiltjellel kezd o dik a paramter, hanem futtathat parancsparamter, akkor nem fjlnvknt rtelmezo knt. A parancs lefutsa alkalmval annak szabvnyos kimenetre rt adatok kerlnek a pufferbe olvass esetn, illetve annak szabvnyos bemenetre r az ed, amennyiben kirs volt a m uvelet. Pldul r !ls azt jelenti, hogy hajtsd vgre az ls parancsot, vedd annak kimenett, vagyis az aktulis knyvtr fjljainak listjt, s olvasd be a pufferbe. 15

2.3. Regulris kifejezs sajtossgok


eltrsek vannak. A A bemutatott regulris kifejezs szintaktikhoz kpest a kvetkez o ?, +, {, }, (, ) jelek megel oz o backslash nlkl sajt magukat jelentik, specilis jelentsk prex esetn van csak. jdonsgot jelentenek a szavak elejre, illetve szavak vgre val illeszkedst megknnyt o < s > kombincik. Az el obbi szavak els o bet ujre, mg az utbbi a szavakat l valamint alhzsjelb kvet o els o karakterre illeszkedik. (Szavak a bet ukbo ol ll k. sszefgg o karaktersorozatok.) Tovbbi kiegsztsek a kvetkezo , Felttel nlkl illeszkednek a sor elejre (` ) illetve a vgre ( ). ` Szavak elejre s vgre illeszkedik (nulla karakter hosszan). B Szavak belsejre illeszkedik 0 karakter hosszan. oleges karakterre illeszkedik. w Egy sz tetsz

W Szavakon kvli karakterekre illeszkedik.

2.4. Indts parancssorbl


Az ed a kvetkez o paramtereket fogadja el: ed [-] [-Gs] [-p szveg] [fjlnv] -G Kompatibilitsi problmk miatt hasznlhat. m, t s !! parancsok m ukdnek msknt. Hatsra a G, V, f, l,

l hasz-, -s Diagnosztikai zenetek megsz untetse. Akkor van r szksg, ha szkriptb o nljuk az ed-et, s nem interaktvan. prompt szveget llthatjuk be. -p szveg A parancs mdban a sor elejn lvo dik, akkor A megadott fjlnv a beolvasand fjl neve. Ha felkiltjellel kezd o azt a shell ltal vgrehajtat parancsnak rtelmezi ed s a futtatsakor megjelen o kimenetet dolgozza fel. Az alaprtelmezs szerinti fjlnv akkor lltdik be, ha dik. nincs vgrehajts, vagyis a megadott fjlnv nem ! jellel kezd o

2.5. Pldk
Egy interaktv szerkeszts illusztrlja az ed hasznlatt. A kommentek a # jellel kezd od o sorokban vannak.
$ed # res pufferrel kezdnk. Ehhez runk hozz az a paranccsal. a Edvrd kirly, angol kirly Lptet fak lovn: Hadd ltom, gymond, mennyit r A wales-i tartomny. . # Visszartnk parancs mdba. Elmentjk a szveget. w bardok 100

16

q A ments utn az ed kirta a puffer mrett, vagyis hogy hny karakteres a szveg. Most javtsuk ki a helyesrsi hibkat $ed bardok 100 ,p Edvrd kirly, angol kirly Lptet fak lovn: Hadd ltom, gymond, mennyit r A wales-i tartomny. # Az utols sor az aktv. 1 Edvrd kirly, angol kirly s/Edvrd/Edward/ p Edward kirly, angol kirly # A wales sem gy kell /wales-/s//velsz/ ,p Edward kirly, angol kirly Lptet fak lovn: Hadd ltom, gymond, mennyit r A velszi tartomny. # Mentsk a javtsokat w 99 q

17

3. fejezet

sed, a folyamszerkeszt o
egy nem interaktv szvegszerA sed (stream editor), vagyis a folyamszerkeszto folyakeszt o. Segtsgvel egyszer u mdostsokat vgezhetnk a bemeneten rkez o mon. (Ez lehet egy fjl, vagy adatok egy pipe-bl.) A m ukdse bizonyos mrtkig khz, amelyek megengedik a szkriptbo l trtn hasonlt az olyan szvegszerkeszto o vezrlst (mint pldul az ed), de a sed a bemenet minden sort legfeljebb egyszer dolgozza fel, kvetkezskppen hatkonyabb. Szveg feldolgozs pipe belsejben a sed t a hasonl tpus szvegszerkeszto kt egyedi tulajdonsga, ez klnbzteti meg o ol. A sed a kvetkez o paramtereket fogadja el: -V, version A program verziszmt s egyb informcikat ratjuk ki. m -h, help Rvid ismertet ot kaphatunk a paramterezsi szablyokrl, alapveto ukdsr ol. -n, quiet, silent Az alaprtelmezs szerinti, minden m ukdsi ciklus utni kiratst tiltja. -e szkript, expression=szkript A szkript-et, mint parancsot f uzze hozz a feldolgozst vgz o parancs-sorozathoz. -f szkript-fjl, le=szkript-fjl A megadott fjl tartalmt f uzze hozz a feldolgozst vezrl o parancs-sorozathoz. Ha nem adunk meg ms paramtert, alaprtelmezsknt a szabvnyos bemenetet dolgozza fel a program. Amennyiben egy vagy tbb fjlnv szerepel a paramterek kztt, azokat sorra veszi a sed. Ezek kztt utalhatunk - jellssel a szabvnyos bemenetre, mint fjlra. Ha nagyon rvid szkriptet runk, az albbi paramterezsi forma is megfelel: sed szkript fjlnv1 fjlnv2 ... paramter maga a szkript kell, hogy Teht amennyiben nincsenek opcik, az elso legyen, utna jhetnek a feldolgozand fjlok nevei. A sed m ukdst egy parancsokbl ll sorozat (program) vezrli, amelyet a -e s a -f paramterekkel megadott utastsok illetve programrszletek sszef uzsvel ka vel (;) kell elvlasztani. punk. Ha egy sorba tbb parancsot runk, azokat pontosvessz o

18

Kln sorba kerlnek azok a parancsok, amelyeket kln -e opci mellett adtunk meg. bb. Hvsra is mutatunk pldkat kso a A parancs-sorozat parancsokbl ll, amelyek hrom rszre bonthatk. Az els o cm vagy cmtartomny, amely az adott parancs vgrehajtst engedlyezi vagy tiltja. A msodik rsz egyetlen karakter, maga a parancs. Az utols rsz a parancs paramtere, . amely m uveletenknt klnbzo A sed rendelkezik egy munkaterlettel s egy vglappal. A m ukds ciklusok dik. ban trtnik, ami a kvetkez o bemeneti sornak a munkaterletre val rsval kezdo Ekkor a sed sorra veszi a parancs-sorozat egyes parancsait s egyenknt megvizsglja a cmzsket. Ha egy parancs cmzse engedlyezi az aktulis soron a parancs vgrehajtst, akkor ez megtrtnik. Hacsak az adott parancs nem rendelkezik mskpp, elemn folytatdik, a mr mdostott munkaa m ukds a parancs-sorozat kvetkezo terleten tovbb dolgozva. (Lteznek a vezrlst befolysol parancsok is.) Fontos, hogy a cmzs vizsglata nem a mdostott munkaterlet szerint trtnik, hanem az eredeti bemeneti sor alapjn. A vglapot nhny egyszer u parancs kiadsval hasznlhatjuk. Segtsgkkel a , mskor visszamsolhat, esetleg a kt munkaterlet tartalma a vglapra mentheto terlet tartalma felcserlhet o. A m ukdsi ciklus befejezsvel (ez zrja le egy bemeneti sor feldolgozst) a munkaterlet tartalma alaprtelmezs szerint a kimenetre kerl. Ez fellbrlhat a -n opci hasznlatval, amikor is csak akkor kerl adat a kimenetre, ha azt a p paranccsal explicite krjk.

3.1. Cmzs
A cmzs segtsgvel sort vagy sorokat jellhetnk ki. A cmzs vgre rt felkiltjel a jelentst az ellenkez ojre lltja: eszerint a cmzs pontosan azon sorokat jelli ki, amelyeket a felkiltjel nlkli cmzs nem jellt ki. en a kvetkez Ha nem adunk meg cmzst, az az sszes sort kijelli. Alapvet o o cmzsi mdok hasznlhatk: szm A megadott sorszm sort jelli ki. Ha tbb bemeneti fjl van, akkor sed fo sora nem jellhet lyamatosan szmolja a sorokat, teht a msodik fjl elso o ki egyessel. els o lpskz A megadott sortl kezdve, lpskz kznknt minden sort kijell. Pldul 12 a pratlan sorokra utal, mg 33 a hrommal oszthatakra. $ A legutols sora az utols bemeneti fjlnak. /regkif/, %regkif% Azon sorokat jelli ki, amelyekre a megadott regulris kifejezs illeszkedik. Ha a / jelt ol eltr o zrjeleket szeretnnk hasznlni, arra is lehe leges ms karakter t osg van. A msodik formban a szzalkjel helyett tetszo hasznlhat. Ilyenkor termszetesen a kifejezs belsejben nem kell a per jel el backslash-t tenni. A hatrol karaktert azonban nem tudjuk nllan hasznlni. ltalban nem nehz tallni olyan karaktert, amely nem szerepel a regulris kifejezsnkben. Clszer u teht azt vlasztani hatrol karakterknt. Pldul keressnk egy szvegben olyan rszeket, ahol kt / kztt szmok vannak:

19

//[0-9]*// Ebben a formban elgg tlthatatlan a kifejezs, helyette sokkal jobb az albbi: \@/[0-9]*/@ Ezeknl sokkal durvbb esetek is vannak a gyakorlatban. Amikor sok s / karakter szerepel egy kifejezsben, azt szoks ferde fogpiszkl szindrmnak nevezni. /regkif/I, %regkif%I A kifejezs utn rt nagy I bet u hatsra a kis- s nagybet uk megklnbztetse nlkl prblja illeszteni a regulris kifejezst (caseinsensitive). vel elvlasztva. Ha a Cmtartomny megadhat, ha kt cmzst adunk meg vessz o cmzst kvet msodik cmzs regulris kifejezs, annak vizsglata csak az els o o sornl kezd odik.

3.2. Parancsok
3.2.1. Gyakori parancsok
parancsokra minden bizonnyal szksg lesz. A sed hasznlata sorn a kvetkezo # Megjegyzs kezdett jelzi, amely egszen a sor vgig tart. Bizonyos implement. cik csak teljes soros kommenteket engedlyeznek, de ez nem jellemz o s/re/csere/jelz o A re regulris kifejezst megprblja illeszteni a munkaterletre. Ha ez sikerlt, az illeszked o rszt kicserli a csere alatt megadott szvegre. Ebben lehetnek hivatkozsok az illesztett regulris kifejezs rszkifejezseire 1, 2, ..., 9 formban. A teljes illesztett rszre hivatkozhatunk & jellel. Mivel a munkaterlet (a legtbb alkalmazssal ellenttben) tbbsoros lehet, itt a hivatkozst ( n). regulris kifejezs tartalmazhat jsor karakterre trtno Az s parancs utni jelz ok a g, p, szm, w valamint I kzl kerlhetnek ki. Hasonlan az ed-nl ltottakhoz, a g arra utastja a programot, hogy ne csak az els o illeszkeds esetn vgezze el a csert, hanem a mdosts helye utn folytatva, ameddig mg lehet. A szm hozzrsval az annyiadik illeszkedsnl fordul a jelz lehet kieszkzlni a csert. Ha p elo ok kztt, a munkaterlet tarl talma a csere utn a kimenetre kerl. I a regulris kifejezs kis- s nagybet ukt o fggetlen illesztst kri, mg w fjlnv a megadott fjlba rja a munkaterlet tartalmt. q A m ukds befejezse tovbbi feldolgozs nlkl. A munkaterlet tartalma kirdik, amennyiben az automatikus kirs nincs tiltva. Hasznlatra plda a head parancs megvalstsa sed-del: sed 10q fjlnv

20

Az egyetlen parancs akkor hajtdik vgre, amikor a cme aktivizldik, vagyis a 10-dik sorban. Addig alaprtelmezs szerint kirs trtnik. A 10-dik sor q m uvelete kilps el ott mg kirja azt a sort is. d Trli a munkaterletet. Vezrlsmdost hatssal is rendelkezik: j ciklus kez t olvassa be a d odik, vagyis az aktulis sor feldolgozsnak vge, a kvetkez o bemenetr ol. ltalban arra hasznlhat, hogy egy cmzs esetn ne folytatdjon annak a sornak a feldolgozsa, hanem kirs nlkl, azonnal lpjnk a kvetkez o sorra, az utastsokat ellr ol kezdve. Pldul: sed -e $d az utols sort nem rja ki. p Ez a parancs a munkaterlet tartalmt a kimenetre rja. Szinte mindig a -n opcival egytt hasznlatos. Nem denilt, hogy ha az automatikus kirats engedlyezett, akkor a p parancs hasznlata utn mgegyszer kikerljn-e a munkaterlet ). a ciklus vgn, vagy sem (megvalstsfggo n Amennyiben az automatikus kirats engedlyezett (alaprtelmezs), kirja a mun sort katerlet tartalmt. Fggetlenl attl, hogy volt-e kirs, betlti a kvetkez o paa munkaterletre, annak eddigi tartalmt fellrva. A vezrls a kvetkez o dik ellr rancsnl folytatdik, teht nem kezdo ol a parancs-sorozat feldolgozsa. t (next). Intuitv jelentse: vedd a kvetkezo tt szeparancsok Parancsokat csoportost kzs cmzshez, amely a nyit zrjel el o repel.

3.2.2. Ritkbban hasznlt parancsok


Valszn uleg ritkbban van szksg ezekre a funkcikra, de olykor rvid szkriptek rsakor is hasznunkra lehetnek. leges msikra cserlhet y/forrs-karakterek/cl-karakterek/ (A / karakter tetszo o egy y parancson bell.) A forrs-karakterek s a cl-karakterek ugyanannyi karaktert kell, hogy tartalmazzon a behelyettestsek elvgzse utn ( jellel vdett karakterek, escapeszekvencik). A parancs hatsra, ha a forrs-karakterek valamelyike szerepel cl-karakterre cserl a munkaterleten, az a neki megfelelo odik. A neki megfelel o a hely sorszma szerint rtend o. Pldul y/abc/ABC/ az a, b, c karaktereket nagybet us prjukra cserli. djn. Tbb soron t is folytatdhat, de a szveg A szveg j sorban kell, hogy kezdo dnie. A parancs hatsra az utolst kivve mindegyiknek backslash-re kell vgzo bemeneti sor beolvassa el az aktulis ciklus befejeztvel, vagyis a kvetkezo ott a megadott szveg kirdik. i szveg Az el oz ohz hasonl parancs, de a szveg kirsra azonnal sor kerl. c szveg A megcmzett tartomny eldobsa utn kirja a megadott szveget, majd j ciklus kezd odik. Ha nem csak egy sort cmznk meg, hanem egy intervallumot, akkor az a rsz trl odik, s helyette bekerl a megadott szveg, amelyet az a parancshoz hasonlan, j sorba kell rni. 21

= A megcmzett sor szmt rja ki jsor karakterrel lezrva. l Kirja a munkaterletet egyrtelm u formtumban. Ez azt jelenti, hogy a nem nyomtathat karakterek (kztk az kezetesek s a is) C-stlusban, backslash-sel s kdukkal kerlnek ki, hossz sorok trsnl jelzi a trs helyt, valamint minden sor vgre $ kerl. r fjlnv A megadott fjl tartalma az aktulis ciklus vgn a kimenetre kerl (v. a). Ha nem sikerl a fjl olvassa, nem jelez hibazenetet, hanem azt resnek tekinti. w fjlnv A munkaterlet tartalmt a megadott fjlba rja (A fjlt ltrehozza ha nem ltezik, illetve fellrja, ha az ltezett.). D Trli a munkaterletet az els o jsor karakterig bezrlag. Ha maradt mg szveg a munkaterleten, jrakezdi a ciklust jabb sor beolvassa nlkl. Egybknt j ciklus kezd odik j beolvasssal. beolvasott sort. Ha N jsort f uz a munkaterlet vgre, majd hozzrja a kvetkez o nincs tbb bemenet, teht nem sikerl jabb feldolgozand sort behoznia, a program futsa befejez odik, vagyis kilp. P Kirja a munkaterletet az els o jsor karakterrel bezrlag. h A vglapra msolja a munkaterlet tartalmt (copy). H jsort r a vglap tartalmhoz, majd hozzf uzi a munkaterlet tartalmt. g A munkaterletre msolja a vglap tartalmt. G jsor karaktert r a munkaterlet vgre, majd hozzrja a vglap tartalmt is. Kezdetben a vglap res. Ezt hasznlja ki az albbi parancs is, amelyik a bemenetn rkez o sorok kz egy-egy jsort szr be: sed G fjlnv x Felcserli a vglap s a munkaterlet tartalmt.

3.2.3. Tovbbi parancsok


Ha ezekre a parancsokra van szksg, felmerl a gyan, hogy ltalnosabb programozsi nyelvet kellene inkbb hasznlni, mint pldul a perl-t. Esetenknt, ha mgis a sed mellett maradunk, az albbiak segtsgvel mr igen szvevnyes szkriptek kszthet ok. : cmke Megjelli a helyet egy cmkvel, amelyre a vezrlst a b vagy a t paranccsal irnythatjuk. M uveleti hatsa nincs. b cmke A vezrls felttel nlkl a cmkvel megadott helyre kerl. Analg egyes nyelvek goto utastsval. t cmke Feltteles ugrs a megadott cmkre. Akkor trtnik ugrs, ha az utols beolvass vagy az el oz o t parancs vgrehajtsa ta volt sikeres m uvelet.

22

3.3. Regulris kifejezs sajtossgok


z A sed-es regulris kifejezsek nmileg eltrnek az elo oekben bemutatott szintaktiktl, viszont a klnbsgek hasonltanak az ed-nl ltottakra. Bizonyos specilis k: |, karakterek itt is backslash utn nyerik el klnleges jelentsket. Ezek a kvetkez o +, ?, (, ), {, }. Viszont annak kvetkeztben, hogy a sed a munkaterleten vgzi a m uveleteket, illetve a regulris kifejezs illesztseket, ami ugye tbb sorbl is llhat, az jsor karakter rtelmezse egy kicsit ms. A pont (.) jsor karakter is lehet, s n-knt jsor karakterre nem ilbrhol hivatkozhatunk jsor jelre. A munkaterlet vgn lv o leszkedik a n. A s a $ opertorok a munkaterlet sorainak elejre illetve a vgre illeszkednek. A tab karaktert illet oen az egyes sed megvalstsok kztt eltrs van, kzlk tbb nem ismeri fel t alakban.

3.4. Pldk
A sed szkriptek ltalban nagyon rvidek, szellemesek s emiatt egy kicsit nehezen rthet ok. Az itt bemutatott pldkat ezrt rszletes magyarzat ksri, amely a megrtsket hivatott segteni. A pldk az egyes parancsok legaprbb tulajdonsgait is kihasznljk, ezrt nem rt, ha az olvassuk sorn visszatekintnk a parancsok lershoz. Amikor nem szerepel bemeneti fjl megadva, a sed a szabvnyos bemenetn vrja a sorokat, s azt a szabvnyos kimenetre rja. Legtbb plda az egyszer usg kedvrt ezt a formt hasznlja. A parancsok ismertetsnl szerepelt a sed G plda, amely a bemenet minden sora utn beszr egy res sort, kihasznlva, hogy a vglap res. Ennek a parancsnak az ellentettje, vagyis amikor a bemenet minden m en resek, kisz sodik sort, amelyek tudvalevo urjk, teht csak a pratlanadik sorokat rjuk ki: sed n;d Ekkor az els o parancs kvetkeztben kirdik a beolvasott sor, majd a kvetkez ovel folytatjuk a d parancsnl. Ez eldobja a munkaterletet, s jrakezdi a ciklust, immron a harmadik sorral az elejn. Innen folytatdik a harmadik sor kirsval, a negyedik eldobsval, stb. Lthat, hogy a pratlan sorok kirdnak, a prosakat pedig eldobja a program. Megoldhat lett volna ugyanez bonyolultabb cmzssel is (12 a pratlan, 22 a pros sorokat cmzi), de ilyen bonyolts nem szksges. Vegyk szre, hogy ebben a pldban aposztrfok kz rtuk az utastsokat. Ha csak sed n;d-t rtunk volna, akkor a shell kt parancsnak rtelmezi: az egyik sed n, a msik pedig d, ami szinonima az ls-re. Ez mindenkpp rossz, hiszen amit mi a sed parancs paramternek szntunk, azt a bash kettvgta. Ha bizonytalanok vagyunk, mindig tegyk ki az idz ojeleket a biztonsg kedvrt. Egy olyan plda kvetkezik, amelyik megszmozza a sorokat.

23

sed = | sed N;s/\n// Itt mr kt sed hvs szerepel. Az els o minden sor el kirja annak sorszmt, de ez egy nll soron szerepel. A kimenet gy nz ki:
1 els o sor 2 msodik 3 harmadik ...

Ez kerl a kvetkez o sed bemenetre, amelyik minden ciklusban a beolvasott sor sort (N), majd kzttk az jsor karaktert trli mell a munkaterletre f uzi a kvetkezo (s/ n/ /), s ezt rja ki. Ezt a problmt azrt nem lehet egyetlen sed hvssal megoldani, mert az = parancs azonnal a kimenetre rja a sorszmot egy jsor karakterrel egytt. Ha a munkaterletre rn, ott helyben el lehetne vgezni a tovbbi manipul cit. Nagyon kompliklt megoldst lehetne az = parancs nlkl kszteni a kvetkez o z gondolatmenet szerint: A vglapon tartannk az elo o sor sorszmt. Minden beolvasskor felcserlnnk a munkaterlet tartalmt a vglapval, s a munkaterleten megnvelnnk a szmot eggyel (Ez bonyolult, sok s/// utastssal megoldhat.). Ehhez hozzf uznnk a vglapot, majd kirnnk, s vgl az aktulis sorszmot visszarnnk a vglapra. Ez nem praktikus, a pipe-os megolds sokkal jobb. Mindssze a sed lehet osgeinek illusztrlsa vgett emltettk. DOS alatt kt karakter jelzi a sorok vgt, mg a UNIX-szer u rendszerekben csak egy. Ha DOS-os fjlokat szeretnnk UNIX-ostani, az albbi szkript megteszi: sed s/.\$// A DOS-os sorvgek CR/LF tpusak (kocsivissza s soremels karakterek). Ezekb ol a CR-t kell eltntetni, ami UNIX-os rtelmezsben a sor utols karaktere. Ezt egyszer uen trli a megadott szkript. fjl sorait jobbra illesztjk, vagyis annyi sszetettebb plda kvetkezik. A bejvo l lljon. szkzt szrunk be, hogy minden sor 79 karakterbo sed -e :a -e s/\^.\{1,78\}\$/ &/;ta kpp nz ki Kt paramterben adtuk meg a szkriptet, gyakorlatilag ez a kvetkez o a szkript-darabok sszef uzse utn, minden utastst kln sorba rva:
:a s/\^.\{1,78\}\$/ &/ ta

Az els o sor egy ugrsi cmke, semmi mdost hatsa nincs. A msodik sor, amennyiben a munkaterlet hossza 78-nl nem nagyobb, beszr az elejre egy szkzt (Az & jel a teljes illesztett rszt szrja be). A harmadik sor t parancsa, amennyiben sikeres s m uvelet trtnt, visszaugrik az a cmkre, azaz a szkript elejre. Egy bemeneti soron addig tart a ciklus m ukdse, amg vgl elri a munkaterlet hossza a 79-et. Ekkor az s nem helyettest, gy t sem ugrik vissza. A vgre rve kirdik a 24

jobbra igaztott sor. A parancssort rhattuk volna az albbi formban is: sed :a;s/\^.\{1,78\}\$/ &/;ta A jobbra igazts megrtse utn a kzpre igazts mr sokkal knnyebben megy: sed -e :a -e s/\^.\{1,77\}\$/ & /;ta Itt amg a munkaterlet tartalma 78 karakternl rvidebb, addig egy-egy szkzt mindig beszrunk el ore s htra is. Vilgos, hogy vgl kzpre igazodik az eredeti sor. Egy msik mdszer a jobbra igaztsbl indul ki: sed -e :a -e s/\^.\{1,77\}\$/ &/;ta -e s/\( *\)\1/\1/ , szkzkb Mindssze utna a munkaterlet elejn lvo ol ll hossz rszt megfe rszt megismtli a 1. Ez lezi. Itt a ( * ) 1 regulris kifejezst illeszti, amely elso abban klnbzik az el oz o megoldstl, hogy mg ott vgl minden sor 78 vagy 79 karakter hossz, itt a sorok jobb oldaln nem lesznek szkzk. A q parancs ismertetsnl megmutattuk, hogy a head segdprogram hogyan valsthat meg a sed-del. Most annak prja, a tail kvetkezik, amely a bemenetre kldtt fjl utols 10 sort rja csak ki:
sed -e :a -e \$q;N;11,\$D;ba

Ha a fjl vgre rnk, a munkaterletet kirva kilp a szkript. Egybknt beolvas mg egy sort s a munkaterlethez f uzi. Ha mr elrtk a 11. sort, trli a munkaterlet els o sort. A vgrehajts az els o utastsnl folytatdik. Ezzel a mdszerrel a munkaterleten tartjuk az utols 10 sor tartalmt. A grep segdprogramot is emullhatjuk a sed-del:
sed -n /regkif/p sed /regkif/!d

sorokat Az els o vltozat letiltja az automatikus kirst, s csak a cmzsre illeszked o sorok esetben megakadlyozza az automatirja ki. A msodik a cmzsre illeszkedo ciklusba kezd. kus kirst: a d parancs a munkaterletet trli, majd a kvetkezo Az elektronikus levelek szabvnyos formtumban a fejlcet a trzs kveti. A fejlcben szerepelnek olyan informcik, mint a felad, a cmzett, a trgy s a levl szava tovbbtsi informcii. Ezek mind egy-egy sort foglalnak el, ahol a sor els o spont ll, majd az rdemi informci a jelents (pl. To:, From:, stb.), utna ketto l. kvetkezik. A levl trzse maga a tartalom, amit egy res sor vlaszt el a fejlct o levl formtum fjlbl kivlasztjk Az albbi sed programok a bemenetkre rkezo res sorig kell a fejlcet illetve a trzset. A fejlc kivlasztshoz mindssze az els o mindent kirni, utna semmit, vagyis ki lehet lpni: sed /\^\$/q A trzs ezutn kezd odik, vagyis az els o res sorig mindent ki kell trlni:

25

sed 1,/\^\$/d Subject: felirat nlkl a kvetkezo A levl trgyt kivlasztani a sor elejn lvo kppen lehet: sed /\^Subject:*/!d; s///;q dik, trl Minden sor, amely nem Subject: sztringgel kezdo odik. Az els o olyan, amelyik gy kezd odik, az s/// parancshoz kerl. Itt res regulris kifejezsre illesztnk, ami az el oz o regulris kifejezs megismtlse lesz, teht a / Subject: */ ltal szkzkkel illesztett rszt trljk. Ez pont a Subject: felirat az utna kvetkezo egytt. Mivel gyis egyetlen ilyen sor van, a q paranccsal kilphetnk. A vlaszcm ltalban a From: ltal jelzett cm, m ha Reply-to: is van a fejlcben, a vlaszokat oda kell kldeni. Ezt az albbi szkript llaptja meg: sed /\^Reply-To:/q; /\^From:/h; /./d;g;q M ukdse sorn ha Reply-to:-val tallkozik, azt kirja s azonnal kilp. Ha From:ot tall, azt a vglapra msolja. Minden ms sort gyelmen kvl hagy (d). Az res sort elrve, amely a fejlc vgt jelzi s nem illeszkedik a d cmzsre, a vglapon lv o From: sort a munkaterletre rja, majd kilp. Ezt helyes, mert amennyiben elrte a fejlc vgt, s el obb nem lpett ki, nem volt Reply-to: sor. Mivel From: sor mindenkpp kellett, hogy legyen, annak tartalma a vglapon van, azt kell kirni kilpskor. a beolvasott sorokat fordtott Vgl kt nehezebb szkript kvetkezik. Az elso sort utoljra, a msodikat az utols elo tti sorrendbe rja a kimenetre, teht az elso helyen, s gy tovbb. sed 1!G;h;\$!d Az els o sor kivtelvel mindegyik beolvasskor vgrehajt egy G parancsot. Emlkeztet ol, ez a vglap tartalmt rja a munkaterlet vgre egy j sort kezdve. Az gy kapott szveget visszamsolja a vglapra (h), s hacsak nem az utols sort re lp kirs nlkl. Az utols beolvasott sornl kirja dolgozta ppen fel, a kvetkezo az eddig felhalmozott adatokat. Ha a m ukdst tgondoljuk, vilgoss vlik, hogy lps sorn a beolvasott sort a vglapon lvo szveg gyakorlatilag minden kzblso el rja. Ez vgeredmnyl a megfordtott sor-sorrendet adja. A msik szkript minden beolvasott sor bet uit fordtott sorrendben rja vissza a kimenetre: sed /\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.// Egy sor feldolgozsa hossz folyamat. Ezalatt a munkaterlet kt sorbl ll, az els o a fel nem dolgozott rszt tartalmazza, a msodik pedig a feldolgozottat. Minden lps sorban van ben az els o sor els o karaktere a msodik sor elejre kerl. Kezdetben az elso utaa teljes szveg, vgl pedig megfordtva a msodikban lesz teljesen. A szkript els o stsa csak kzvetlenl az els o beolvasst kvet oen lesz rvnyes: ilyenkor beilleszti bb lertaknak megfelel az res vglapot, vagyis kt sort kszt az elo oen.

26

t teszi: a munkaterlet els A msodik parancs, egy s/.../.../ a kvetkezo o so l ll. Ezek kzl rra illeszt egy regulris kifejezst ( n-ig), amely kt rszkifejezsb o rsz. Teht 2-be 1 az els o karakter, 2 pedig a msodiktl a sor vge jelig terjedo tte megismmg a sorvg jel is belertend o. Ezeket ms sorrendbe rja vissza, de elo teli a teljes illesztett rszt (&). Gyakorlatilag az eredeti kt sor kz beszrja 2 1-et. Mivel 2 jsorra vgz odik, ez nllan ll majd egy soron, 1 pedig az eredetileg msodikknt szerepl o sor elejre kerl. A most hrom sorbl ll munkaterlet msodik karaktere a kkt sora annyiban klnbzik az eredeti kt sortl, hogy annak legels o vetkez o sorba kerlt. Ezutn a D trli az els o sort. Cmzse //, ami az el oz o regulris kifejezs megis sorban, akkor a mtlse, vagyis amit s els o fele hasznl. Ha mg volt karakter az elso l kezd D vgrehajtdhatott s j beolvass nlkl ellro odhet a parancsok feldolgozsa. karaktert, amely egy jsor jel volt. A Egybknt s/.// kvetkezik: ez trli az elso munkaterleten mr csak a megfordtott szveg van, amely kirdik s folytatdik a munka a kvetkez o beolvasott sorral.

27

4. fejezet

Az awk nyelv
4.1. ttekints
beAz awk egy szvegfeldolgoz programozsi nyelv. Nevt kitalli nevnek kezd o t uit egyberva kapta: Alfred V. Aho, Peter J. Weinberger s Brian W. Kernighan. Egy awk program (szkript) utastsokbl ll. Minden egyes utasts egy minta s egy akci rszre oszthat: minta { akci } minta { akci } minta { akci } ... Futtatskor a rendszer a beolvasott fjl egyes soraira egyenknt megvizsglja a min akci vgrehajtdik. tk illeszkedst. Ha egy minta megfelelt, akkor a neki megfelel o utastsnl folytatdik. Az eddigiek A vizsglat alaprtelmezs szerint a kvetkezo alapjn ez a nyelv nagyon hasonlt a sed-nl megismert szvegmanipull nyelvhez. Ahogy az a kvetkez okben bemutatsra kerl, az awk esetben mind a mintk, mind az akcik felptse sokkal sszetettebb lehet, gy ltalnosabb funkcik is megvalsthatk awk nyelven megrt szkriptekkel. Az utastsok akci rszben a C nyelvhez hasonl vezrlsi szerkezeteket hasznlhatunk, s lteznek vltozk is, amelyekre mind a minta, mind az akci rszekben hivatkozhatunk. A komoly ki- s beviteli parancsok segtsgvel akr ms alkalmazsok futtatsval pipe-okat hozhatunk ltre, s asszociatv tmbk gyorsthatjk s v a szmegyszer usthetik az adatfeldolgozst. Beptett fggvnyek teszik lehet o tsok elvgzst, illetve a karakterlncok talaktst is. Ezen tl a felhasznl sajt fggvnyeket is rhat, amelyek rekurzv hvsa is megengedett. A feldolgozs teljesen sor-orientlt. Az ppen beolvasott sorra a $0 vltoz hivatkozik. Az awk ezt automatikusan oszlopokra darabolja a munka megknnytse vgett. Alaprtelmezs szerint a feldarabols az res (szkz vagy tab) karakterek mentn trtnik. A sor elejn s vgn lv o res karaktereket nem veszi gyelembe, s a szomszdosakat is egynek tekinti. Az egyes oszlopokra $n alakban hivatkozhatunk, ahol n az oszlop szma. Teht ha a beolvasott sor alma krte barack meggy, akkor $2 rtke krte. A feldarabols mikntjt mi is bellthatjuk az FS vltoz segtsgvel, err ol ks obb sz lesz. Valjban a bemeneti fjl soronknti feldolgozsa is kongurlhat, helyesebb volna rekordokra bontsrl beszlni. Mivel azonban az esetek legnagyobb rszben ben vgig az alaprtelmezett soronknt dolgozzuk fel a bemenetet, ebben az ismerteto

28

m ukdsnek megfelel oen sorokat hasznlunk rekordok helyett. A rekordokra val darabolst egybknt az RS vltoz szablyozza. Ha nem adunk meg valahol mintt, akkor az akci minden sorra vgrehajtdik. sorok egyszeAmennyiben az akci rsz marad el, alaprtelmezs szerint a megfelel o r uen kirdnak. gy pldul az egyszer u { print \$0 } szkript az sszes beolvasott sort a kimenetre rja. mdon trtnhet. Ha a szkript rvid, Az awk programok futtatsa kt klnbzo paramterek, amennyiazt a parancssorba rhatjuk els o paramterknt. A rkvetkezo ben fjlnevek, a bemeneti fjlokat jelentik. Ha nem adunk meg bemeneti fjlt, az awk a szabvnyos bemeneten vrja a feldolgozand informcit. awk { print \$0 } fjl1 fjl2... Ha hosszabb szkriptet futtatunk, vagy esetleg tbbszr is szeretnnk azt hasznlni, egy fjlba kell rni a szkriptet, ahonnan az awk -f szkripfjl fjl1 fjl2 ... sorral m ukdtethetjk. A nyelv szablyainak tfog ismertetse utn pldk illusztrljk azok hasznlatt.

4.1.1. Az awk nyelv elemei


Mintk Az awk nyelv sokkal ltalnosabb sorcmzsi mechanizmussal rendelkezik, mint a sed vagy az ed. A minta mez oben a program vltozit is vizsglhatjuk, illetve tbb sszetett mintkat. minta megfelelsb ol logikai m uveletekkel llthatunk elo Alapkomponensknt ezek a mintk hasznlhatk: /regkif/ Megfelel a minta, ha a megadott regulris kifejezs illeszkedik a beolvasott sorra. Valjban ez az egyszer ustett rsmdja a \$0 \~{ } /regkif/ kifejezsnek. kifejezs Megfelel o, ha a kifejezs rtke szmknt nem nulla, vagy sztringknt nem res. Vltozk, fggvnyhvsok s sszehasonltsok is szerepelhetnek egy kifejezsben (lsd albb). sor beolvassa el BEGIN, END Specilis mintk, amelyek az elso ott (BEGIN), illetve a befejezst kzvetlenl megel oz oen (END) illeszkednek. Csak nmagukban hasznlhatk, teht nem szerepelhetnek sszetett mintkban. res minta Minden sorra illeszkedik. el minta1, minta2 A minta1 els o el ofordulstl kezdve, a minta2 elso ofordulsig tart szakaszt jelli ki. fordul gymlcsket: Az albbi pldban megszmoljuk a bemeneti fjlban elo

29

BEGIN { print "Gymlcsk szmolsa:" } /alma|barack|dinnye/ { gyumolcs=gyumolcs+1 } END { print gyumolcs }

fordulsnak szHa gyelmesek vagyunk, felt unhet hogy nem a gymlcsk el o mt kapjuk meg gy, hanem azon sorok szmt, amelyekben legalbb egy gymlcs neve el ofordul. Ez azrt van, mert az awk soronknt dolgozza fel a bemenetet, s hi akci csak egyszer hajba szerepel egy sorban tbb gymlcs, attl a vltozt nvel o tdik vgre az emltett sor kvetkeztben. Az eredeti problmra a megolds az volna, fordulsok szmval nvelnnk meg a gymlcs ha az akci rszben egy helyett az elo vltozt. Kifejezsek Konstans kifejezs hrom fle lehet az awk-ban. Numerikus konstansokat vagy tzes szmrendszerbeli alakjukkal adunk meg norml formban, vagy exponencilis form jelek ban. Pldul 105, 1.05e+2 is ugyanazt jelenti. A sztring konstansokat dupla idz o kztt kell megadni, pldul szveg. A harmadik, a regulris kifejezs konstans, amelyet a szoksos formban, perjelek kz kell rni: /a*b/. nllan egy regulris kifejezs konstans ugyanazt jelenti, mintha tte \$0 \~ /regkif / lenne odarva. A hullmvonal (tilde) opertor az elo ll vltozra illeszteni prblja a mgtte ll regulris kifejezst. Mivel $0 az aktulisan beolvasott sor, ezzel arra illesztjk a regulris kifejezst. Egy ilyen illeszts eredmnye 0 vagy 1 aszerint, hogy sikerlt-e. Pldul siker = /alma/ utn a . siker vltoz rtke akkor lesz 1, ha \$0 \~ /alma/ illesztheto Vltozk Az awk vltozi a szkript utastsain keresztl mdosthatk, olvashatk, de a parancssoron keresztl kezdeti rtket is adhatunk nekik. Vltozk bet uket, szmokat s dhetnek szmjeggyel. A kis- s alhzs karaktereket tartalmazhatnak, de nem kezdo nagybet uk klnbsgre rzkeny a nyelv (case sensitive). A vltozk hordozhatnak mind numerikus, mind szveges informcit. Hogy p l, s a vltozkhoz pen hogyan kerl rtelmezsre tartalmuk, az az adott krnyezett o tpusok kztti konverzi ugyanbels oleg rendelt tpus informcitl is fgg. A belso akkor automatikus. Egy szmot tartalmaz vltoz numerikus krnyezetben a megfelel o szmrtket jelenti, de szveges krnyezetben az adott szm tzes szmrendszerbeli alakjt, mint sztringet. Pldul legyen a=2, b=3 s c=4. Ekkor (a b) + c rtke 27. A zrjelben egyms utn rtuk az a s b vltozkat. Az sszef uzs sztring m uvelet, operandusait sztringknt kezeli, vagyis egyms mell rva 24-et ad eredmnyl. Ehhez van hozzadva c, s mivel az sszeads numerikus m uvelet, rtk szerint addik ssze a kett o. Ha olyan sztring kerl numerikus krnyezetbe, amelyik nem rtelmezhet o szmknt, akkor helyette a 0 rtkkel szmol a rendszer. Ezrt pldul tigris + 1 rtke egyszer uen 1. leg rendelve, Valjban minden vltozhoz hrom fle tpus valamelyike van bels o kritikus esetben ennek segtsgvel rtelmezi a rendszer tartalmukat (pldul sszehasonltskor). Ezek a STRING, a NUMERIC s az STRNUM. Ez az 1992-es POSIX szabvnyostskor lett bevezetve. Az j tpus, az STRNUM rtelme, hogy a rendszer

30

helyesen tudja kezelni a sztringknt lert szmokat, mint pldul a +2. A hasznlat sorn a vltozkhoz rendelt tpus nem vltozik, egyedl akkor, amikor rtket adunk a vltoznak. A split() fggvny, illetve az argv tmb ltal rintett vltozk STRNUM tpusak. k: <, >, <=, >=, ==, !=. Ezek kzl Az sszehasonltsi opertorok a kvetkezo sg jelet kell az els o ngy magtl rtet od o. Az azonossg vizsglathoz kt egyenlo rni, mg a klnbz osgnl csak egyet. Ezek az sszehasonltsok az operandusaik tpustl fgg oen vagy szmrtkknt, vagy sztringknt vgzik el az sszehasonltst. A msodik eset azrt rdekes, mert ha a 29 s 210 sztringeket lexikograkus ren dezs szerint hasonltjuk ssze, akkor 210 kerl ki kisebbknt, mivel balrl az els o tpus vltozt hasonltunk klnbz o karakternl 1 kisebb, mint 9. Ha STRING belso ssze ms vltozval, akkor sztring-sszehasonlts trtnik, egybknt numerikus. Htra van mg kt specilis sszehasonlt opertor ismertetse: s ! a regulris igaz rtkkel tr vissza, ha a bal oldaln kifejezsek illeszkedst vizsgljk. Az elso ll kifejezsre illeszthet o a jobb oldaln ll regulris kifejezs, a msik pedig ennek ellentettje. Muveletek Aritmetikai m uveletek, ms programozsi nyelvekhez hasonlan itt is vannak. Az alap pontos szmokkal dolm uveletek (+,-,*,/) rendelkezsre llnak, de mivel az awk lebeg o gozik, az osztsnl nincs egszre kerekts (Erre van az int() fggvny.) Ezeken kvl a maradkols (%) s a hatvnyozs () hasznlhat mg. ket. Ezt leggyakSztringek sszef uzse trtnik, ha egyszer uen egyms utn rjuk o rabban a print m uvelet paramterben tesszk: print "Vezetknv: " $1 " t keresztnv: " $2 sgjellel lehetsges. A bal oldalon ll vltoz a Vltozk rtkadsa az egyenlo jobb oldalon lv o kifejezs rtkt veszi fel ennek hatsra. Az a vltoz rtknek lehet b-vel val nvelsre kzenfekvo osg a kvetkez o: a = a + b fordulnak. Ezrt az aritIlyen s ehhez hasonl rtkadsok nagyon gyakran el o prjaikat, amelyek a bal oldalukon ll metikai m uveleteknek bevezettk megfelelo vltozn s a jobb oldalukon ll kifejezsen elvgzik az adott m uveletet, majd a z bal oldali vltoznak ezt azonnal rtkl is adjk. gy az el o o sor egyenrtk u az albbival: a += b stett vltozata van mg a kivonsnak, szorAz sszeads mellett ilyen egyenlo zsnak, osztsnak, maradkos osztsnak s a hatvnyozsnak is. Az egyszer ustsekkel mg tovbb mentek, mivel a programozs sorn rendkvl gyakori az eggyel val nvels s cskkents is. Erre val a ++ s a \-\- unris (egyoperandus) m uvelet, amelyek a megadott vltoz rtkt eggyel nvelik, illetve cskkentik. Aszerint, hogy az opertort a vltoz el vagy mg rjuk, az gy kapott kifejezs rtke a vltoz j, illetve rgi rtke lesz. Legyen pldul a=5, majd hajtsuk vgre a b=a++ rtkadst. Ennek hatsra b 5 lesz, a pedig 6. Ha ehelyett b=++a-t . rtunk volna, akkor mindkt vltoz 6-tal lenne egyenlo

31

Logikai kifejezsek Bizonyos esetekben a kifejezseket logikai igaz-hamis rtkknt kell rtelmeznie a kt szably rvnyes. Ha a vltoz egy szm, rrendszernek. Ekkor a kvetkezo tke akkor igaz, ha nem nulla. Sztring esetben pedig a nem res karakterlnc lesz igaz rtk u. Ennek kvetkeztben a 0 sztringkonstans igaz rtk u, de 0+0 mr hamis, mivel az utbbi numerikus jelleg u mennyisg. Boolean-tpus, vagyis igaz-hamis rtk u kifejezsek kztt logikai m uveleteket vgezhetnk. bool1 && bool2 Logikai s m uvelet; akkor lesz igaz, ha minkt operandusa igaz. bool1 || bool2 Logikai vagy m uvelet; akkor igaz rtk u, ha legalbb az egyik oldaln igaz rtk u kifejezs ll. . !bool A megadott kifejezs negltjt lltja elo Feltteles kifejezsek Van mg egy, rendkvl tmr szerkezet, amellyel clszer u vatosan bnni, mert knnyen ttekinthetetlenn vlhat a program. felttel ? kif1 : kif2 Ennek rtelmezse a kvetkez o: ha a felttel kirtkelse igaz rtket ad, vedd kif1-et, egybknt kif2-t. Muveleti precedencik Az ismertetett opertorok kztt el ore denilt m uveleti els obbsgi sorrend van. Ez fellbrlhat zrjelezssel. Hasznljunk zrjeleket akkor is, ha csak egy kicsit is zhet bizonytalanok vagyunk, mert gy megelo o a hibs m ukds. A kvetkez o tblzat sszefoglalja a m uveletek egymshoz kpesti viszonyt, a leger osebbt ol a leggyengbbig haladva. Az egyes szinteken bell, kivve az rtkadsokat, a csoportosts balrl jobbra trtnik.

32

$ ++ ! +/% +szkz < > <= > != == | ! in && || ?: = += -= *= /= %= =& Ki- s bevitel

Zrjelezs. Mez o hivatkozs. Nvel o s cskkent o opertorok, mind a prex, mind a posztx vltozat. Hatvnyozs. Unris m uveletek. Szorzs, oszts, maradkkpzs. sszeads, kivons. Sztring sszef uzs. sszehasonlt valamint tirnyt m uveletek. Regulris kifejezsekhez kt od o sszehasonlt m uveletek. Tmb tagsgi m uvelet. Logikai S. Logikai VAGY. Feltteles kifejezs. rtkadsok.

Az awk leginkbb a szabvnyos bemenetet, illetve a bemenetknt megadott fjlokat dolgozza fel, s a szabvnyos kimenetre r. A szkript szmra tltsz mdon trtnik l nem dnthet l a bemeneti fjlok olvassa; bellro o el, hogy a szabvnyos bemenetro vagy fjlokbl rkezik a feldolgozsra vr adat. sg van egyb fjlokbl trtno olvaAz el oz oekben elmondottak mellett leheto ssra, oda rsra, s ot, a shell segtsgvel ms programok indtsra azok szabvnyos sgeket tagki- vagy bemenett rva vagy olvasva. Ebben a fejezetben ezeket a lehet o laljuk. Az rs legf okpp a print m uvelettel trtnik. Hasznlatnak az albbi mdjai lehetsgesek: print Paramterek nlkl meghvva az aktulisan beolvasott sort ($0) rja ki. print kif1 kif2 ... A megadott kifejezseket sorban kirja, jsor karakterrel elvlasztva. print kif1 kif2 ... < fjlvnv, print kif1 kif2 ... fjlvnv, print kif1 kif2 ... | fjlvnv A kifejezseket nem a szabvnyos kimenetre, hanem a megadott fjlba rja. Az tirnytsra a is hasznlhat, ekkor hozzr a fjlhoz, annak eredeti tartalma nem vsz el. Pipe-ba rhatunk, ha a | karaktert hasznljuk az tirnytsra. Hasonlan viselkedik a beolvasst tmogat getline parancs: getline A kvetkez o sort veszi az alaprtelmezsknt olvassra hasznlt fjlbl (Ahonnan egybknt is olvassa a sorokat a m ukdsi ciklusok sorn). A $0 vltozba kerl a beolvasott rekord. sort, s a $0 vltozba rja. getline fjlnv A megadott fjlbl olvassa a kvetkezo getline vltoz A kvetkez o beolvasott sort a megadott vltozba teszi, $0 vltozatlan marad.

33

sort az adott fjlbl olvassa be, s a megadott getline vltoz < fjlnv A kvetkezo vltozba teszi, $0 szintn vltozatlan marad. Pipe-okat hasznlhatunk beolvasskor is. Ekkor azonban a futtatand parancssort kell el ore rni, azutn kvetkezik a getline. Pldul "ls" | getline > nev fjljnak nevt a nev vltozba rja. Pipe-ok s az aktulis knyvtr kvetkezo fjlok hasznlata esetn fontos tudni, hogy az awk magtl nem zrja le a megnyitott l llomnyokat vagy pipe-ot, mg a fjl vge jel (EOF) elrse utn. Ha teht ellr o szeretnnk olvasni pldul egy fjlt minden m ukdsi ciklus sorn, akkor magunknak kell a lezrsrl gondoskodni. Erre a close(fjlnv) parancs alkalmas. Adott esetben fjlnv helyett ugyangy rhat ide megnyitott pipe neve is. Szablyozhat a beolvass az alaprtelmezs szerinti fjlokbl is. A next utasts sort s a szkript azonnal a kvetkez o m ukdsi ciklusba kezd: beolvassa a kvetkezo elejre helyezi a vezrlst. Ennl nagyobb lpst tesz meg a nextfile utasts: ez nem a kvetkez o soron, hanem a kvetkez o fjlnl folytatja a feldolgozst. Programok futtatsra szolgl a system() fggvny. A paramterknt kapott parancssort megprblja vgrehajtani, majd visszatr annak kilpsi kdjval (A nem POSIX szabvny rendszerekben ez nem biztos, hogy m ukdik). v, nagyon hasonlt a C nyelvbo l A printf utasts formzott kirst tesz leheto ismer os printf-re. Hasznlata sorn printf formtum, kif1, kif2, ... alakban rand, ahol az els o paramter sztring kell, hogy legyen. Ez speciklja a nyomtats formtumt, illetve azt, hogy a tovbbi paramterek milyen helyet foglalnak k szmra magtl rtet el a kirt adatok kzt. Hasznlata a C nyelvet ismero od o, a felvilgostst. tbbiek szmra a man awk parancs adhat megfelelo Vezrlsi szerkezetek Az awk szkript akcikat tartalmaz rszei tbb utastst is tartalmazhatnak, ezeket vel kell o ket elvlasztani egy soron bell. vagy kln sorba kell rni, vagy pontosvesszo A szkript vgrehajtsa sorn ltalban a lert utastsokat egyms utn veszi. Hatkonyabb, sszetettebb programok rsakor azonban szksg lehet vezrlst irnyt utastsok hasznlatra. Ezek, mint a legtbb procedurlis nyelvben, itt is megtallhatk. A feltteles elgazs alapvet o fontossg az awk nyelvben is. Alakja if (kifejezs) igaz-g [ else ] hamis-g , de magukat a szgletes zrjeleket (A szgletes zrjelbe rt else-g nem ktelezo nem kell kirni sohasem!) A m ukdst gy befolysolja, hogy amennyiben a kifejezs kirtkelse igaz logikai rtket ad, az igaz-g hajtdik vgre, egybknt, ha van, a hamis g. Ha tbb utastst szeretnnk valamelyik gba tenni, kapcsos zrjeleket kell hasznlni.

34

Pldk: if (/alma/) print $0 Ha az aktulisan olvasott sorra illeszkedik az alma regulris kifejezs, kirja az egsz sort, egybknt nem. if (/alma/) { print $0 almak++ } else next sornl folytatja Hasonl az el oz ohz, de ha nincs illeszkeds, azonnal a kvetkezo az olvasst. Emellett minden alkalommal, ha a beolvasott sorban szerepel az alma sz, megnveli az almak vltozt. sg is van. Ha addig szeretnnk valamilyen Ciklusok szervezsre tbb leheto m uveletet ismtelni, amg egy bizonyos felttel mg teljesl, az albbi szerkezetet hasznosthatjuk: while (felttel-kif) trzs Ez a vgrehajtst a trzs ismtelgeti mindaddig, amg a felttelknt megadott ki vizsglatnl a fejezs kirtkelse igaz logikai rtket ad. Termszetesen, ha az els o felttel hamis, egyszer sem lesz vgrehajtva az utasts trzse. Sokszor legalbb egyszer vgre kell hajtani az utasts-blokkot ahhoz, hogy a felttelt megfelel oen vizsglhassuk. Erre val az albbi szerkezet: do trzs while (felttel-kif) vgrehajtst a M ukdse megegyezik az egyszer u while-ciklussal, kivve az els o trzsnek, amely mindenkpp megtrtnik. a for kulcssz segtsgvel. Vltozk lptetst megvalst ciklus ksztheto for (kezd; felttel; lptets) trzs Ha a vezrls elri a for-t, vgrehajtdik a kezd rszbe rt utasts. Ezutn a felttel vizsglatval megkezd odik a ciklus. Ha a kirtkels eredmnye igaz, vgrehajtdik a trzs. Ezutn a jra visszakerl a vezrls a felttel vizsglathoz. Ez a kr egszen addig tart, amg vgl a felttel hamiss vlik, s a vezrls elhagyja a for ciklust. Pldaknt az albbi ciklus kirja 1-t ol 100-ig az egszeket: for (i=1; i<=100; i++) print i

35

A megrts ellen orzse rdekben gondoljuk vgig, hogy az albbi megolds ugyanazt eredmnyezi, mint egy for ciklus: kezd if (felttel) do trzs lptets while (feltten) A ciklusok irnytsra jl hasznlhat a continue s a break utasts; a szakasz vgn err ol is sz lesz. A tmbk elemein futhatunk vgig a for msik alakjt hasznlva (A tmbk rszletes ismertetse ks obb jn). for (vltoz in tmb) m uveletek tmb[vltoz]-val A megadott vltozt a rendszer vgiglpteti azokon az rtkeken, amelyek indexknt el ofordulnak. Nagyon hasznos szerkezet, az alacsonyabb szint u programozsi nyelvek nem tartalmaznak ehhez hasonl, knyelmes megoldsokat. A break kulcssz segtsgvel kilphetnk az aktulis while, do-while vagy for ciklusbl. Hasonl krnyezetben m ukdik a continue is, de ez nem szaktja meg a ciklus m ukdst teljesen, hanem azon nyomban jrakezdi a ciklust az elejn. rEz a while esetben felttel-ellen orzshez vezet, mg a for-nl lptets s elleno if-do-while zs is van. Fentebb megadtunk egy, a for m ukdsvel megegyez o m szerkezetet. Vilgos, hogy continue hasznlata eltro ukdshez vezet. Vltozk A Kifejezsek szakaszban mr rszletesen foglalkoztunk a vltozkkal. Az albbiak redenilt vltozk lerst kzljk. ban a tmbkkel ismerkednk meg, illetve az elo Tmbk Az awk nyelv tmogatja az asszociatv tmbk hasznlatt. Ezzel olyan eszkz kerl a keznkbe, amely nagyban megknnytheti a munkt, s megkmlheti a programozt a vacakolstl, amelyet akkor kellene elvgeznie, ha ugyanezt mondjuk C nyelven akarn megrni. Ennek az ra a sebessg cskkense, de ez csak iszonyatos mret u fjlok esetn volna szrevehet o. rtkeket rva A tmb olyan vltoz, amely mg szgletes zrjelbe klnbz o gyakorlatilag klnbz o skalr (=nem tmb) vltozkat kapunk. Pldul tomb[1]="alma" tomb[2]="korte" tomb["paradicsom"]=16 k. Legtbb programozsi nyelv tmbjei csak nem negatv egszekkel indexelhet o Az awk, a perl-hez hasonlan sztring kifejezseket is megenged indexelsre. Kpzeljk el, egy fjlba soronknt egy sz szerepel. Szeretnnk statisztikt kszteni,

36

a fjlban. Erre alkalmas a mgpedig arrl, hogy melyik sz hnyszor fordul elo kvetkez o szkript: { szavak[\$0]++} END { for (szo in szavak) print szo ":" szavak[szo] } Tetsz oleges sz esetn, a szavak tmbk azzal a szval indexelve egy nll vltozt kapunk (Kezdetben minden numerikus vltoz nulla rtk u, a sztringek pedig vltozjt, amely az resek). Egy sz szmba vtele esetn a tmb neki megfelelo eddigi el ofordulsok szmt tartalmazza, eggyel megnveljk. Vgl kirjuk a tmb elemet, amely a sz volt. egyes elemeinek tartalmt, s persze az indexelo ket trlni is lehet. Erre Ahogyan j elemeket szrhatunk be egy tmbbe, meglv o val a delete utasts. A paramterben megadott tmb elemet trli: delete tomb["alma"] Ha az egsz tmbt trlni kvnjuk, akkor index nlkl adjuk meg a nevt a delete utn: delete tomb. Az is ellen orizhet o, hogy valamilyen index szerepel-e a tmb indexei kztt. A tartalmazs opertor hasznlatt egy plda illusztrlja: if ("tigris" in szavak) print "Volt mr tigris is:" szavak["tigris"] A tbbvltozs tmbt gy lehet elkpzelni, hogy egy tmb elemei tmbk. Ekkor kt vltozval is indexelni kell, hogy megkapjuk a megcmzett skalrt. Ennek vel elvlasztva rjuk a vltozkat az indexbe: a hagyomnyos mdja az, hogy vesszo tablazat[x,y]. Az awk ilyenkor gyakorlatilag sszef uzi a megadott vltozkat, s gy egyetlen sztringet kapva, azzal indexel egy egydimenzis tmbt. Az indexek sszef uzse a SUBSEP nev u beptett vltoz rtknek kzbekelsvel trtnik. Ez alaprtelmezs szerint egy nem nyomtathat karakter, 034. Ha tlltjuk, gyelni kell az ebb ol add potencilis hibalehet osgekre. Pldul SUBSEP="" hatsra a teszt tmb kvetkez o kt eleme a vrakozsokkal ellenttben ugyanaz a vltoz: teszt["a@b","c"] s teszt["a","b@c"]. Tbbdimenzis tmbk indexnek tartalmazsvizsglatra is alkalmaz az in opertor. Hasznlatnak formja: (var1, var2, ... ,varn) in tmb kifejezs visszatrsi rtke igaz, ha van ilyen indexe a megadott tmbnek, s sg van for ciklussal vgigfutni a tmb sszes hamis egybknt. Ugyancsak leheto elemn. Ehhez azonban egy kis trkkre van szksg: for (sszetett in tmb) { split(sszetett, sztbontott, SUBSEP) ... }

37

Ilyenkor az sszetett nev u sztring tpus vltoz vgigfut a tmb lehetsges inde l van sz, a fut vltoz SUBSEP-pel elvlasztott xein. Mivel tbbdimenzis tmbro rtkeket tartalmaz. Ezeket szedi szt a split fggvny, s darabjai a sztbontott tmbbe kerlnek. A split fggvny rszletes ismertetse a Beptett fggvnyek szakaszban tallhat meg. Beptett vltozk A legtbb vltozt sajt cljaira hasznlhatja a programoz az awk szkriptek megrsa sorn. Ez all nhny kivtel van. Bizonyos vltozk arra hasznlhatk, hogy befolysoljk az awk alaprtelmezs szerinti m ukdst; segtsgkkel nomhangolhat, s ezzel hatkonyabb tehet o a feldolgozs. El oszr az awk-t kzvetlenl vagy kzvetve irnyt vltozk bemutatsa kvetkezik: CONVFMT Ez a sztring szablyozza a szmok sztringg alaktst. gy m ukdik, mint az sprintf els o argumentuma. Alaprtelmezs szerinti rtke "%.6g". FIELDWIDTHS Szkzkkel elvlasztott szmrtkek felsorolsnak kell lennie. Ha nem res, akkor a beolvasott sorok pontosan ilyen szles oszlopokra bomlanak, gy adva a $1, $2, stb. vltozkat. Ha nem adtunk neki rtket, a bonts FS szerint trtnik. l ll sztring, akFS A bemeneti mez ok elvlasztja. Ha rtke egyetlen karakterbo kor ezzel a karakterrel kerlnek feldarabolsra a beolvasott sorok. Ha res (""), lesz. akkor a beolvasott sor minden karaktere kln mezo Alaprtelmezs szerint egyetlen szkzt tartalmaz az FS vltoz. Ez egy kiv leges sorozata elvlasztknt teles eset, ilyenkor szkzk s tabultorok tetszo szkzk s tabultorok gyelm ukdik. Tovbb a sorok elejn s vgn lvo men kvl maradnak. z Amennyiben rtket adunk az elo oekben ismertetett FIELDWIDTH vltoznak, az awk tvlt x szlessg u oszlopokra bonts mdra. Ha szeretnnk jbl tartalom szerinti mez okre bontssal dolgozni, az FS vltoznak kell rtket adni. Erre a legegyszer ubb md az FS=FS utasts. jelek kztt) FSltalnosabban, tetsz oleges regulris kifejezs is adhat (idzo ) illesznek rtkl. Ekkor a beolvasott sorra val diszjunkt (egymsba nem r o kre. kedsek szabdaljk szt azt mezo IGNORECASE Ha ez a vltoz nem nulla s nem is res sztring, vagyis logikai rtke igaz, akkor a regulris kifejezsek illesztsnl a kis- s nagybet uk kztt nem tesz klnbsget a rendszer. OFMT Szmok sztringg konvertlst szablyozza a print utasts vgrehajtsa sorn. OFS (Output Field Separator) Az egyetlen print utastssal a kimenetre rt vltozk kzti szepartor, kezdeti rtke egyetlen szkz. ORS (Output Record Separator) Minden print utn kirdik ez a vltoz. Alaprtke n, vagyis az jsor karakter.

38

RS (Record Separator) A bemeneti fjl kisebb egysgekre darabolst szablyozza. Alapbelltsknt egy jsor karaktert tartalmaz, ezrt a bemenetet soronknt dolgozza fel az awk. Ha az FS-hez hasonl mdon ezt tlltjuk, akkor a beolvasott fjlok nem felttlenl sorokra tagoldnak, hanem n. rekordokra bomlanak. Az egyrtelm usg kedvrt ebben a fejezetben mindentt az alaprtelmezst vettk gyelembe, amikor sor-orientlt feldolgozknt mutattuk be az awk nyelvet. A m ukdst nem befolysolja kiszmthatatlanul, ha a tagols nem a sorvgeknl trtnik. res sztringet megadva RS-nek, az res sorok mentn bomlik rekordokra a bemeneti fjl. ltalnosabb szerkezeteket regulris kifejezsek megadsval alakthatunk ki. SUBSEP Tbbdimenzis tmbk indexelse sorn gyakorlatilag az indexvltozk sszef uzsvel kapott sztringgel indexel a rendszer. Az sszef uzs sorn az dik. Alaprtelmezs szerint egyes vltozk kz a SUBSEP karakterlnc kelo ez egy nem nyomtathat karakter, teht nem veszthetjk el az egyrtelm usget (Lsd b ovebben a Tmbk szakaszt). Az albbi vltozk informcit hordoznak. Mdostsuk nem clszer u, br nha megfontolt rsukkal ki lehet hasznlni bizonyos tulajdonsgaikat (ezt helyben megemltjk). ARGC s ARGV Az ARGV egy tmb, amelyet 0-tl ARGC-1-ig egsz szmokkal indexelhetnk. A tmb tartalmazza az awk meghvsakor a paramterknt tadott fjlneveket, amelyekb ol a bemenet formldik. Ez a plda egyszer uen kirja ezeket a fjlneveket:
BEGIN { for (i=0; i<ARGC; i++) print ARGV[i] }

Hasonlan a C nyelvhez, ARGV[0] itt is a fut program neve, ltalban awk. ARGIND Az ppen feldolgozs alatt ll bemeneti fjl sorszma. Az ARGV [ARGIND] tmbelem pedig e fjl nevt adja meg. Ez utbbi megegyezik a FILENAME vltoz tartalmval. ENVIRON Egy asszociatv tmb, amely segtsgvel elrhetjk a shell krnyezeti vltozit. Pldul ENVIRON["PATH"] a futtathat programok elrsi tjait adja meg, mg ENVIRON["HOME"] a felhasznl sajt knyvtrt. rtkeinek megvltoztatsa hatstalan az awk ltal elindtott tovbbi folyamatokra nzve. ERRNO Ha a getline vagy a close m uvelet vgrehajtsa sorn hiba lp fel, ez a vltoz tartalmazza annak lerst. FILENAME A feldolgozs alatt ll fjl neve. Ha a szabvnyos bemeneten dolgozik az awk, akkor ez -. A BEGIN ltal kijellt akci vgrehajtsa sorn a FILENAME res, mivel mg nem kezdte meg a rendszer a beolvasst. FNR Az aktulis rekord sorszma az ppen feldolgozs alatt ll fjlban. Minden j rekord beolvassakor eggyel nvekszik. j fjlok megkezdsekor nullra lltdik. Ennek megvltoztatst ki lehet hasznlni (Alaprtelmezs szerint a rekordok a sorok). 39

mez NF Az aktulis sorban (rekordban) lvo ok szma. Ezek a mez ok $n hivatkozssal rhet ok el, ahol n egy 1 s NF kztti egsz szm. NR Az eddigi teljes feldolgozs alatt beolvasott rekordok szma. RLENGTH A match fggvny ltal illesztett sztring hossza karakterekben kifejezve. Sikertelen illesztsnl -1. RSTART A kezd o karakter sorszma a match fggvny ltal illesztett rsznek, s 0, ha nem sikerlt az illeszts. RT A rekord beolvassakor az RS ltal illesztett rszt tartalmazza. rtelme akkor van, ha regulris kifejezst hasznlunk a bemenet rekordokra bontsra, klnben gyis egy n karakter az rtke. Fggvnyek a vltozkon. A fggvA fggvnyek segtsgvel sok hasznos m uvelet vgezhet o vel elvlasztott paramterekkel lehet meghvni. nyeket a nevk utn zrjelben, vesszo Nmelyek visszatrsi rtkknt adjk vissza eredmnyket, illetve a vgrehajts sikerre vonatkoz informcit. eredmeny=fuggveny(p1,p2) Ha egyetlen paramter sem szksges a hvshoz, a zrjeleket akkor is ki kell tenni. Enlkl az awk szmra nem volna egyrtelm u, hogy fggvnyt akarunk-e hvni, vagy egy vltozra hivatkozunk. Fontos, hogy soha ne hagyjunk szkzt a fggvny neve s a paramtereket tartalmaz zrjel kztt! Beptett fggvnyek terA beptett fggvnyeket az awk-ban mindig hasznlhatjuk, a szkript klnbz o leteir ol, ahol ez szintaktikailag lehetsges. Ezekkel szemben llnak a felhasznl ltal denilt j fggvnyek, amelyeket csak a dencit tartalmaz szkriptben hasznlhatunk. Az albbi lista a szmokkal dolgoz fggvnyeket veszi sorra: int(x) A megadott szmot a tizedesjegyek elhagysval egsz szmm alaktja. gy a pozitvakat lefel, a negatvakat pedig felfel kerekti. sqrt(x) Egy nem negatv szm ngyzetgykt adja vissza, egybnt hibt jelez. exp(x) Exponencilis fggvny, az e szm megadott hatvnyt szmtja ki. log(x) Termszetes alap logaritmus, csak pozitv szmokra m ukdik helyesen, egybknt hibt jelez. . sin(x), cos(x) Trigonometrikus fggvnyek, ahol a paramter radinban rtend o atan2(x,y) Megadja y/x arcus tangenst. rand() Egy 0 s 1 kztti vletlenszmot ad. Az eloszls egyenletes, tovbb nulla s egy sohasem jn ki.

40

srand([x]) A vletlenszm genertort inicializlja a megadott rtkkel. Paramter nl segtsgvel kszti el kl meghvva a pillanatnyi dtum s ido o a vletlenszm genertort. knt karakterlncok manipullsra, Ugyancsak rendkvl hasznosak az albbi, fo feldolgozsra hasznlhat fggvnyek. index(sztring, resz) Az els o paramterknt kapott sztring vltozban megkeresi a m sodik paramter sztring el ofordulst rszsztringknt, majd visszatr az elso ilyen el oforduls kezd okarakternek sorszmval. Ha nincs tallat, 0-t ad vissza. length([sztring]) A megadott sztring karakterekben szmtott hosszt adja vissza. Ha szmot adunk meg, akkor azt sztringg alaktja, s annak a hosszt kapjuk meg. Ha nem adunk meg argumentumot, akkor a $0 hossza lesz az eredmny. match(sztring, regkif) Regulris kifejezst prbl illeszteni a sztring vltozra. Visszatrsi rtke az els o illeszkeds kezdete. Sikertelen illeszkeds 0 visszatrsi rtket eredmnyez. Emellett mg a beptett RSTART s RLENGTH vltozkat hasznlja az eredmny visszaadsra. RSTART ugyanaz, mint a visszaadott szm, RLENGTH pedig az illesztett rsz karakterekben mrt hossza. split(sztring, tmb [,szepartor]) A megadott sztring vltozt feldarabolja a darab a szepartor segtsgvel. Az eredmny a tmb-be kerl: az elso tmb[1], a msodik tmb[2], stb. Ha a harmadik paramtert elhagyjuk, az kre bontsnl. aktulis FS-t hasznlja, csakgy, mint a beolvasott sor mezo Ha a szepartor szkz (" "), akkor szkzk s tabultorok minden sorozata elvlaszt, s a sztring elejr ol s vgr ol is eltnteti ezeket a karaktereket. Ha tetsz oleges msik karaktert adunk meg szepartor-nak, akkor annak minden el o l ll sztringet adunk meg, fordulsa elvlaszt hats lesz. Ha tbb karakterbo dik, s minden illeszkedse a sztring-re egy az regulris kifejezsknt rtelmezo elvlasztst jelent. sprintf(formtum, kif1, ...) A C nyelv \printf fggvnyhez hasonl, visszatrsi rtke a megadott kifejezs-sorozat formtum szerinti sztringg alaktott vltozata. illeszkedst az sub(regkif, csere [,eredmny]) A megadott regulris kifejezs elso eredmny vltozban kicserli a csere ltal megadott szvegre. A harmadik paramter nem lehet konstans, mert a fggvny megvltoztatja az rtkt. Ha nem adunk meg semmit azon a helyen, a vltoztatsok a $0 vltozt rintik. Visszatrsi rtk a sikeres vltoztatsok szma. dnek. A A csere sztringben a & karakterek a teljes illesztett rszre helyettesto & karakterhez &-t kell rni, mivel nll backslash-t mr sztringbe is dupln rand. z gsub(regkif, csere [,eredmny]) Az elo ohz hasonl m uvelet, de itt nem csak az dik a megfelel els o, hanem az sszes tovbbi illeszkeds is kicserlo o mdon. gensub(regkif, csere, hogyan [,sztring]) A sub s a gsub fggvnyek ltalnos vltozata. A hogyan paramter segtsgvel speciklhat, mely illeszkedsek esetn trtnjen meg a csere. Ha egy szmot adunk meg, az annyiadik illeszke d ds lesz kicserlve, mg ha g vagy G bet uvel kezdo o sztringet, akkor mindegyik, ahogy azt a gsub is teszi. 41

Vigyzat: ez a fggvny mr nem mdostja a megadott vltozt. Az eredmnyezett sztring a visszatrsi rtk. Tovbbi ltalnostst jelent, hogy a csere sztringben hivatkozhatunk a megadott regulris kifejezs rszkifejezseinek illeszkedsre 1, 2, stb. alakban. Ez teljesen hasonlan megy, mint a sed s parancsnl. substr(sztring, kezdet [,hossz]) A sztring rszsztringjt adja vissza a kezdet sorszm karaktert ol kezd od oen, hossz hosszan. Ha nem adunk meg hosszat, a rszsztring az eredeti karakterlnc vgig tart majd. tolower(sztring) A sztring-ben el ofordul nagybet uket kicsiv alaktja. toupper(sztring) A sztring-ben tallhat kisbet uket naggy alaktja. l: A ki s bevitel trgyalsnl mr volt sz az albbi beptett fggvnyekr o close, system. Az fflush() fggvny a megadott fjlnvvel azonostott puffer awk megvalstsok msknt kezelik, implementartalmt azonnal kirja. Klnbzo tljk. szmtsnak kezdete ta A systime() fggvny visszaadja a rendszer ido eltelt msodpercek szmt. Ez POSIX kompatibilis rendszerekben 1970 janur 1-e. Az aktulis id ot a strftime fggvnnyel krdezhetjk le. Paramterezse hasonlt az ANSI C megfelel o fggvnynek paramterezsi szablyaira. Ennek rszleteibe itt nem megynk bele, a C vltozat manual lapjn minden megtallhat (man strftime). Paramter nlkl hvva az albbihoz hasonl eredmnyt ad: Mon Jul 23 14:19:25 CEST 2001 Felhasznli fggvnyek leges helyen, a felsorolt A felhasznl ltal denilt fggvnyek a szkriptben tetszo minta akci feldolgozsi szablyokon kvl lehet denilni. Egy ilyen denci formja:
function name(paramter-lista) { fggvny trzse }

A fggvny trzsben rjuk le, hogy a megadott paramterekkel milyen m uveleteket vgezzen az eljrsunk. A return utasts szolgl a visszatrsre, az utna rt kifejezs lesz fggvnynk visszatrsi rtke. Pldul az albbi fggvny a megadott szmot a sajt, kvnsg szerinti formtumunkban rja ki:
function myprint(szam) { printf "%6.3g\n", szam }

Az albbi fggvny pedig visszatr a megadott szmok szorzatval:


function szoroz(a,b) { return a*b }

Az ltalunk denilt fggvnyeket pontosan ugyangy hvhatjuk meg, mint ahogy azt a beptett fggvnyekkel tettk. 42

Regulris kifejezs sajtossgok Az els o rszben bemutatott regulris kifejezs szintaktika majdnem teljesen megfelel annak, amilyet az awk hasznl. Nhny kiegszts itt is van, amelyek knyelmesebb tehetik a munkt. oleges karakterre illeszkedik, megfelel [[:alnum:]_]-nak. w Szavak tetsz oz o ellentettje, teht szavakon kvli karakterre illeszkedik, ugyanaz, mint W Az el [[:alnum:]_].

< Szavak elejre, de ott egy nulla hosszsg rszre illeszkedik. > A szavak vgre illeszkedik, resen. y Mind a szavak elejre, mind azok vgre illeszkedik, nulla hosszan.
oz o ellentettjeknt szavak belsejben illeszkedik nulla hosszan. B Az el

A buffer elejre illeszkedik.


z ovel egytt csak kompatibilitsi okok miatt A buffer vgre illeszkedik. Az elo hagytk meg, s $ mellett nem jelentenek j kpessgeket. Az awk indtsa kapcsol nlkli paramtere a szkript, illetve A parancssorrl elmondtuk, hogy az elso -f kapcsol esetn a szkriptet tartalmaz fjl, utna pedig a bemenetknt feldolgozand fjlok listja kvetkezik. Lehet osg van az el obb emltett paramterek el egyb opcik beszrsra. -F fs A mez o szepartor (FS) vltozt lltja be. -f forrs-fjl Jelzi, hogy a megadott forrs-fjl tartalmazza a futtatand szkriptet. -v vlt=rt Kezdeti rtket ad a vlt vltoznak. a mez -mf NNN, -mr NNN Memriakorltot llt fel. Az f jelzo ok szmt maximalizlja a megadott rtkkel, mg az r a beolvashat rekordok mrett. Csak kompatibilitsi okokbl tartottk meg. -W opci A POSIX szabvny el orsainak megfelel oen kompatibilitsi opcik adhatk meg. Ezekkel itt nem foglalkozunk. Jelzi, hogy a kvetkez o argumentum mr nem opci, hanem fjlnv, mg akkor is, ha kt ojellel kezd odik. gy hasznlhatunk - kezdet u fjlneveket is. kivtellel. Ha A tovbbi paramtereket fjlnvnek tekinti a rendszer a kvetkez o bemeneti fjl a paramter vlt=rt alak, akkor kzvetlenl az ezutn kvetkez o tt elvgzi az rtkadst. Pldul beolvassnak megkezdse elo awk -f szkript k=1 elso.txt k=2 masodik.txt tt a k vltozt 1-re lltja, a msodik parancs hatsra az elso.txt megkezdse elo fjl el ott pedig 2-re. 43

Pldk l megtudhatTegyk fel, egy szvegfjlrl statisztikt szeretnnk kszteni, amelyb o juk, mely szavak milyen gyakorisggal szerepelnek benne. Nagyon jl hasznlhatk ilyenkor az awk asszociatv tmbjei. . Minden egyes sort sztbontunk szavakra. Ezeket A mdszer legyen a kvetkezo a szavakat sorra vesszk, s segtsgkkel megcmezzk a szavak tmbt. gy min sz eddigi el den szhoz tartozik egy vltoz, amelybe az illeto ofordulsainak szma van. Ilyenkor ezt a szmot megnveljk. A fjl vgre rve a tmb egyes index-elem prjait kirjuk. Ezt a sort parancs bemenetre kldve rendezett listt kapunk az egyes szavakrl. A szokincs.awk szkript gy nz ki:
{ split(\$0, sor_szavai, /[\^[:alpha:]]+/ ); if (length(sor_szavai[i])>=4) { szavak[sor_szavai[i]]++; } for (i in sor_szavai) { } }

END { for (szo in szavak) { szam = sprintf("%4d",szavak[szo]) szam = gensub(/ /,"0","g",szam) print szam ":" szo } }

Itt nincs szksg specilis cmzsre, minden sorral ugyanaz trtnik. Sztbontjuk a sor_szavai tmbbe bet ukt ol klnbz o elvlaszt szakaszokkal. Ezen tmb minden elemre, vagyis a sor szavaira megnveljk a hozzjuk tartoz vltozkat eggyel, jelezve hogy megint el ofordultak (ezt csak a hrom karakternl hosszabb szavakra tesszk, most csak az az rdekes). Amint a fjlnak vge, az END cm alatti rsz hajtdik vgre. Itt a kimenetre rjuk az el ofordulsok szmt s a szavakat, soronknt egy-egyet. Ahhoz, hogy ezt a sort parancs megfelel oen rendezze, a szmokat ugyanolyan hosszan, elrt nullkkal rjuk ki. Az sprintf fggvny szkzket r a szmok el, amelyeket aztn a gensub fggvny segtsgvel nullkra cserlnk. Lefuttatva a programot jelen knyv fjljn az awk -f szokincs.awk segedprg.sgml | sort k: paranccsal, megkapjuk a kvnt eredmnyt. A leggyakoribb szavak a kvetkez o
0031:sztring 0033:fjl 0033:illeszkedik 0033:karakter 0037:lesz 0038:csak 0038:utn 0040:sort 0045:aktulis 0047:kvetkez o 0048:kell 0053:vagy 0057:akkor 0062:kifejezs 0064:regulris 0069:parancs 0076:els o 0076:megadott

44

(Itt most nem mutatjuk a szveg formzsra hasznlt sgml-tag neveket, amelyek sokkal tbbszr fordultak el o, mint brmely sz.) Tovbb a magyar szavak ragozsi fordul, lehet osgeit is gyelmen kvl hagytuk: br a sor trgyesete 40-szer is el o rbb ll. lehet, hogy ms ragozott vagy ragozatlan formival egytt sokkal el o

45

5. fejezet

Perl
z Ebben a fejezetben rviden vzoljuk a Perl nyelv azon rszeit, amelyek az el o o k. A Perl a bash, a C, ekben elsajttott ismeretek birtokban knnyen megrtheto l keletkezett, mindegyikt a sed s az awk nyelvek sszevegytsbo ol tvve annak valamely jl hasznlhat rszt. A Perl interpretlt nyelv, teht nem fordtunk gpi kdot futtats el ott, hanem az interpreternek megadva a programunkat az rtelmezi az utastsokat s azonnal futtatja (lteznek fordtk is, de nem tlsgosan elterjedtek). A programkdot ltalban egy fjlba rjuk, majd a perl forrs.pl utastssal futtathatjuk. Egy Perl program felptse lnyegben olyan, mint az awk szkriptek akci rsze: utastsok sorozata. Teht nincs cmzs, mint a sed-nl, vagy az awk-nl, hanem sorval kezdi a vezrls a program utastsain lpked vgig. Indulskor a program els o n folytatja, hacsak valamely vezrlo szerkezet msknt a vgrehajtst, majd a kvetkezo vlasztja el egymstl. nem rendeli. Az utastsokat pontosvesszo

5.1. A Perl nyelv elemei


5.1.1. Vltozk
s a harPerl vltoz hrom fle lehet: skalr, lista s asszociatv tmb. Az els o l kezd madik nagyon hasonlt az awk megfelelo tpusaira. A lista lnyegben 1-to od o egszekkel indexelt tmb, de leginkbb listk sszef uzse, listkra val bonts s ms ket, ahol tmb jellegk elhomlyosodik. A vlolyan listam uvelet sorn hasznljuk o tozk tpusnak jelzsre prex karaktert kell hasznlni: $a skalr, @a lista, %a pedig asszociatv tmb (hash). A skalr vltozk hasznlata szinte teljesen megegyezik az awk-nl ltottakkal. z Ugyangy lehet neki rtket adni, csak a megelo o dollrjelr ol ne feledkezznk el!
\$szam= 16; \$masik = "A nyertes szm: \$szam" print "\$szoveg\n"

46

Lthat, hogy az idz ojelek hasznlata pontosan gy megy, mint a bash-nl. Hasonlan, lehet osg van szimpla idz ojelek, vagyis aposztrfok hasznlatra (), ezek kztt nincs behelyettests. A fordtott aposztrfok () kztti szveg pedig parancsknt vgrehajtdik a shell segtsgvel. Az el obb emltett idz ojelezseknek van ltalnosabb formja. Ha tbb soron t tart szveget szeretnnk egy vltoznak rtkl adni, azt gy oldhatjuk meg:
\$szoveg = <<VEGE Ide jn a szveg, egsz sok is lehet. VEGE

sortl kezdve, A kt < karakter kijelli, hogy addig tartson a sztring a kvetkez o amg nll sorknt el o nem fordul mgegyszer az utna megadott karaktersorozat (jelen esetben a VEGE). Listk indexelse szgletes zrjelekkel trtnik. Pldul a @dolgok lista els o eleme $dolgok[0]. Figyeljk meg, hogy amikor az egsz listra hivatkoztunk, @ szerepelt a nv el ott. Viszont egy konkrt elemre hivatkozva, amely skalr, a $ kerl a vltoz neve el. Asszociatv tmbk indexelse kapcsos zrjelek segtsgvel trtnik. Pldul legyen %napkelte egy asszociatv tmb. Ekkor egy elemnek rtket gy adhatunk: $napkelte{Htf o}=5:15 tte a $ jelnek kell llni. A listkhoz hasonlan, a hivatkozott elem mr skalr, elo Mindenkpp szt kell mg ejteni a Perl egy rdekes tulajdonsgrl, az alaprtelmezett vltozrl. Ha bizonyos m uveletekhez nem runk operandusknt vltozt, akkor azok egy n. alaprtelmezs szerinti vltozn hajtdnak vgre. Erre a vltozra programrszegybknt explicite is hivatkozhatunk: $_ nven. Tekintsk a kvetkez o letet:
\$valt = "Ez egy hosszu szoveg..."; \$valt =\~ s/a/ax/; if (\$valt =\~ /regkif/) { \$valt =\~ s/b/bx/; } ... \$valt =\~ y/abc/ABC/; print \$valt;

fordulhatnak, pldul (Nincs sok rtelme ebben a formban, de hasonl esetek elo ha karakterkdolsok kztt konvertlunk fjlokat.) A lnyeg az, hogy ugyanazon a vltozn sok vizsglatot s m uveletet vgznk. Ilyenkor rdemes hasznlni az alaprtelmezett vltozt:
\$\_ = "Ez egy hosszu szoveg..."; s/a/ax/; if (/regkif/) { s/b/bx/; } ... y/abc/ABC/; print;

Elhagyva mindenhonnan a $valt vltozt, vgig az alaprtelmezett vltozn dol bb s olvashatbb lett (azok szmra, goztunk, a hats ugyanaz. A program ttekintheto akik hallottak mr $_-rl).

47

Ltezik egy specilis rtk vltozknl, az res rtk (undened). Ilyen minden hasznlatlan vltoz, amelyekbe addig nem rtunk semmit, illetve bizonyos fggvnyek is ilyet adhatnak vissza. Feltteles kifejezsben (if) hamis rtket ad egy res vltoz vizsglata. Regulris kifejezs muveletek A Perlben hasznlt regulris kifejezs szintaktika nagyjbl megegyezik az awk-nl ltottakkal. Ugyangy a = opertor hasznlhat regulris kifejezs illesztsre. Ami rdekessgknt el ojn az az, hogy egy illeszts utn a $1, $2, stb. vltozk sorra tartalmazzk a regulris kifejezs rszkifejezsei ltal illesztett rsz-sztringeket:
if ( \$a =\~ /([\^x]*)x(.*)/ ) { print "\$1 s \$2\n" ; }

Ez a plda az $a vltozra illeszt egy mintt. Ha az illeszts sikerl, kirja a minta kt, zrjelekkel megjellt rszmintja ltal illesztett rszt (a minta egybknt az els o x bet unl sztbontja a megadott sztringet). l a A regulris kifejezseken alapul csere (substitution) is tkerlt a sed-b o Perl-be, nmi kiegsztssel. Formja: s/regkif/csere/jelz ok A jelz ok vagy mdostk kre b ovl a mr megismert vltozathoz kpest (az elso ngy mdost regulris kifejezsek utn is hasznlhat /regkif/mdost alakban): i Kis- s nagybet uk klnbsgt gyelmen kvl hagyja. m Tbbsoros sztringben keresnk. s Tekintse egyetlen sornak a sztringet. x Kib ovtett regulris kifejezs szintaktika hasznlata. Ennl szkzket rhatunk a regulris kifejezsekbe, azokat tbb sorra trdelhetjk, valamint megjegyzsek is szerepelhetnek bennk. illeszkeds, hanem az sszes alkalmval g ltalnos csere, amikor nem csak az elso megtrtnik a mdosts. Ugyanaz, mint a sed vagy az awk esetben. e A csere rszt ne hagyomnyos mdon tekintse, hanem mint egy Perl kifejezst k az illesztett rszekkel: (expression). gy pldul szmtsok vgezhet o
\$a= "1x2"; if (\$a =\~ s/([0-9]*)x([0-9]*)/\$1*\$2/e ) { print "\$a\n" ; } Ez az x karakterrel elvlasztott kt szmot azok szorzatval helyettesti.

Ez az x karakterrel elvlasztott kt szmot azok szorzatval helyettesti.

48

Fjlkezels Fjl vltozk lteznek a Perl nyelvben. Ezeket ltalban meg kell nyitni hasznlat el ott. Erre hasznlhat az open fggvny: open(FILE, "fjlnv") Ezutn kisebb-nagyobb jelek kz zrva a fjl vltozt egyszer u rtkadssal olvashatunk ki egy-egy sort a fjlbl: $sor = <FILE> Az olvass sikertelensge (fjl vgnek elrse) esetn res rtket kapunk vissza. Vgl a close fggvnnyel zrhatjuk le gy: close(FILE). Gyakran a Perl programok a szabvnyos bemenetet s kimenetet hasznljk. Egy l a STDIN fjl vltoz segtsgvel lehetsges. sor olvassa a szabvnyos bemenetro Ha soronknt szeretnnk egy ciklusban olvasni egszen a fjl vgig, clszer u azt ilyen formban rni:
while (\$sor = <STDIN>) { ... }

Ilyenkor a ciklus trzsben hasznlhatjuk a $sor vltozt, amely mindig egy beolvasott sort tartalmaz. Mg egyszer ubb a helyzet, ha az alaprtelmezs szerinti vltozt hasznljuk a beolvasott sor trolsra:
while (<STDIN>) { ... }

Ekkor a ... helyn a $_ vltozval hivatkozhat az ppen beolvasott sor, de mivel az alaprtelmezett vltozrl van sz, sok helyen ez a hivatkozs is elhagyhat. Mg egy egyszer ustsi lehet osg van. Sokszor kell olyan programot rni, amelyet vagy fjlnevek megadsval paramtereznk, s akkor azon fjlokat kell feldolgoznia, l dolgozik. Ha az res fjlvagy paramter nlkl hvjuk s a szabvnyos bemenetro vltozt hasznljuk, a Perl a parancssorban megadott, a Perl szkripten kvli fjlokat adja a programunk bemenetre, vagy a standard bemenetet. Ilyenkor a szkriptben ezekkel nem kell klnsebben bajldni:
while (<>) { ... }

t, ltezik olyan paAz alaprtelmezett vltoz a kvnt sorokon halad vgig. So rancssori opci, amely a perl szkript kr rja az itt vzolt szerkezetet. Pldk El oszr lssunk nhny hasznos parancssori opcit. Ha a sed-hez hasonl mdon szeretnnk a Perl-t hasznlni, hasznljuk a -n opcit. Ez olyan, mintha a Perl programunk az albbi ciklusba lenne gyazva:
while (<>) { ... } \# ide jn a szkript

49

Ez a ciklus az alaprtelmezett vltozt iterlja a parancssori paramterknt megadott fjlokon illetve, ha olyan nem volt, a szabvnyos bemeneten. Nagyon hasonl t. m ukdst kapunk gy ahhoz, ha a sed -n formban hvjuk a folyamszerkeszt o Pldul
perl -n s/x/y/g; if (/banan/) { print; } fjl1 fjl2 ...

a megadott fjlokat dolgozza fel. Ha a -p opcit is hasznljuk, akkor annak hatsra a ciklus vgn automatikusan kirdik az alaprtelmezett vltoz. Jl hasznlhat ez egyszer ubb sed emulcikra azoknak, akik jobban szeretik a Perl regulris kifejezseit:
perl -p -e szkript [fjl1 fjl2 ... ]

Most az awk-nl bemutatott szgyakorisgi statisztika program Perl vltozatt vizsgljuk meg:
while (<>) { @sor_szavak=split(/[\^[:alpha:]+]/); for \$szo (@sor\_szavak) { if (length(\$szo)>=4) { \$szavak{\$szo}++; } } } for \$szo (keys %szavak) { \$szam=\$szavak{\$szo}; while (length(\$szam)<4) { \$szam="0\$szam"; } print "\$szam:\$szo\n"; }

A m ukds teljesen analg. Minden sor beolvassakor a @sor\_szavak listba kerlnek az adott sor szavai (a split utasts az alaprtelmezs szerinti vltozt l ll szavaknl a %szavak nev bontja). A hromnl tbb karakterbo u asszociatv tmb (hash) megfelel oen indexelt elemt nveljk eggyel. A feldolgozs befejezsvel a while ciklus utn a for vgiglpteti a $szo vltozt a %szavak hash kulcsain, vagyis a potencilis indexeken. Ezek segtsgvel megkapjuk az el ofordulsok szmt, amelyet balrl nullkkal egsztnk ki. Vgl az eredmnyt kirjuk. Mind az awk-nl, mind a Perl nyelvnl nagy segtsgnkre volt a nyelvi tmogats az asszociatv tmbk hasznlathoz. Enlkl igen nehezen s knyelmetlenl tudtuk volna megoldani a szavakhoz kapcsolt vltozk elrst.

50

GNU Szabad Dokumentcis Licensz 1.1 verzi, 2000 mrcius

Copyright c 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Jelen licensz sz szerinti sokszorostsa s terjesztse brki szmra megengedett, vltoztatni rajta ugyanakkor nem lehet.

0. ELOSZ
Jelen Licensz clja egy olyan kziknyv, tanknyv, vagy effajta rott dokumentum megalkotsa, mely a sz szoros rtelmben szabad: annak rdekben, hogy mindenkinek biztostsa a szveg sokszorostsnak s terjesztsnek teljes szabadsgt, mdost l, e sokkal, vagy anlkl, akr kereskedelmi, akr nem-kereskedelmi ton. Msfel o d Licensz meg orzi a szerz o, vagy kiad munkja elismershez f uzo o jogt, s egyttal t a msok ltal beiktatott mdostsok kvetkezmnyei all. mentesti o , ami nem jelent mst, mint hogy a Jelen Licensz egyfajta etalonnak tekintheto stst kell, hogy kapjadokumentumbl szrmaztatott munkk maguk is szabad min o jeknt nak. E dokumentum egyben a GNU ltalnos Felhasznli Licensz kiegszt o is szolgl, mely egy a szabad szoftverekre vonatkoz etalon licensz. E Licenszet a szabad szoftverek kziknyveiben val hasznlatra alkottuk, hiszen a szabad szoftver egyben szabad dokumentcit is ignyel: egy szabad programot olyan kziknyvvel kell elltni, mely ugyanazon szabadsgokat biztostja, mint maga a program. Jelen Licensz, mindazonltal, nem korltozdik pusztn kziknyvekre; felttelei tetsz oleges trgykr u rott dokumentumra alkalmazhatk, fggetlenl attl, hogy az knt olyan munkkknyvformban valaha megjelent-e. Mindamellett e Licenszet f o hoz ajnljuk, melyek els odleges clja az tmutats, vagy a tjkoztats.

1. ALKALMAZHATSG S DEFINCIK
E Licensz minden olyan kziknyvre, vagy ms jelleg u munkra vonatkozik, melyen megtallhat a szerz oi jogtulajdonos ltal feltntetett gyelmeztets, miszerint a dokumentum terjesztse jelen Licensz felttelei alapjn lehetsges. A Dokumentum albb brmely ilyen jelleg u kziknyvre, vagy egyb munkra vonatkozik. A lakossg , s mindegyikk megszlminden tagja potencilis licensztulajdonosnak tekintheto tsa egyarnt n.

51

A Dokumentum Mdostott Vltozata brmely olyan munkra vonatkozik, mely tartalmazza a Dokumentumot, vagy annak elemeit akr sz szerint, akr mdostsokkal, s/vagy ms nyelvre lefordtva. A Msodlagos Szakasz egy egyedi nvvel br fggelk, esetleg a Dokumentum egy megel oz o szakasza, mely kizrlag a kiadknak, vagy az alkotknak a Dokumen d tum tfog trgykrhez (vagy kapcsold tmkhoz) f uz o o viszonyrl szl, s nem tartalmaz semmi olyat, ami kzvetlenl ezen tfog tmakr al eshet. (Ha pldul a Dokumentum rszben egy matematika tanknyv, gy a Msodlagos Szakaszban nincs lehet osg matematikai trgy magyarzatokra.) A fenti kapcsolat trgya lehet a tmakrrel, vagy a kapcsold tmkkal val trtnelmi viszony, illetve az azokra vonatkoz jogi, kereskedelmi, lozai, etikai, vagy politikai felfogs. A Nem Vltoztathat Szakaszok olyan specilis Msodlagos Szakasznak szmtanak, melyek ilyetn val meghatrozst az a kzlemny tartalmazza, miszerint a Dokumentum jelen Licensz hatlya alatt lett kiadva. A Bortszvegek olyan rvid szvegrszek, melyek Cmlap-szvegknt, illetve Htlap-szvegknt kerlnek felsorolsra abban a kzlemnyben, miszerint a Dokumentum jelen Licensz hatlya alatt lett kiadva. A Dokumentum tltsz pldnya olyan gppel-olvashat vltozatot jell, mely formtumban kerl terjesztsre, tovbb melynek a nyilvnossg szmra hozzfrheto -programokkal, illetve (pixelekbo l ll kpek tartalma szokvnyos szvegszerkeszto -programokkal, vagy (rajzok esetn) ltalnosan esetn) szokvnyos kpmegjelento , vagy hozzfrhet o rajprogramok segtsgvel azonnal s kzvetlenl megtekinthet o kbe val mdosthat; tovbb olyan formtumban mely alkalmas a szvegszerkeszt o k ltal kezelt formtumokba val automatikus tabevitelre, vagy a szvegszerkeszto laktsra. Egy olyan, egybknt tltsz formtumban kszlt pldny, melynek markupja gy lett kialaktva, hogy megakadlyozza, vagy eltntortsa az olvaskat minden tltsznak. A nem tltsz pldnyok az tovbbi mdoststl, nem tekintheto tltszatlan megnevezst kapjk. formtumok kztt megtallhat pldul Az tltszsg kritriumainak megfelelo A a markup nlkli egyszer u ASCII, a Texinfo beviteli formtum, a L TEX beviteli for DTD hasznlatval, s mtum, az SGML vagy az XML egy ltalnosan hozzfrheto a standardnak megfelel o, emberi mdostsra tervezett egyszer u HTML. Az tltszats lan formtumok kz sorolhat a PostScript, a PDF, a szabadalmaztatott s csak zet o szvegszerkeszt okkel olvashat formtumok, az olyan SGML vagy XML, melyhez a k, s szksges DTD s/vagy egyb feldolgoz eszkzk nem ltalnosan hozzfrhet o k hoznak az olyan gpileg-generlt HTML formtum, melyet egyes szvegszerkeszt o ltre, kizrlag kiviteli clra. Egy nyomtatott knyv esetben a Cmlap magt a cmlapot, illetve brmely azt kiegszt o tovbbi oldalt jell, amely a jelen Licenszben denilt cmlap-tartalmak kzzttelhez szksges. Az olyan formtum munkknl, melyek nem rendelkez , m a szveg nek effajta cmlappal, a Cmlap a munka cmhez legkzelebb es o trzst megel oz o szvegrszeket jelli.

2. SZ SZERINTI SOKSZOROST S
nnek lehet osge van a dokumentum kereskedelmi, vagy nem-kereskedelmi jelleg u sokszorostsra s terjesztsre, brmely mdiumon keresztl, feltve, hogy jelen Licensz, a szerz oi jogi gyelmeztets, tovbb a Dokumentumot jelen Licensz hatlya 52

al rendel o kzlemny minden pldnyban egyarnt megjelenik, s hogy e feltteleken kvl semmi mst nem tesz hozz a szveghez. Nem alkothat olyan technikai korltokat, melyek megakadlyozhatjk, vagy szablyozhatjk az n ltal terjesztett pldnyok elolvasst, vagy sokszorostst. Mindazonltal elfogadhat bizonyos sszeget a msolatok fejben. Amennyiben az n ltal terjesztett pldnyok szma meghalad egy bizonyos mennyisget, gy a 3. szakasz feltteleinek is eleget kell tennie. A fenti kritriumok alapjn klcsnbe adhat egyes pldnyokat, de akr nyilvnosan is kzzteheti a szveget.

3. SOKSZOROST S NAGYOBB MENNYISGBEN


Amennyiben 100-nl tbb nyomtatott vltozatot tesz kzz a Dokumentumbl, s annak Licensze felttell szabja a Bortszvegek megltt, gy minden egyes pldnyt Bortszvegek tisztn s kteles elltni olyan bortlapokkal, melyeken a kvetkez o olvashatan fel vannak tntetve: Cmlap-szvegek a cmlapon, illetve Htlap-szvegek a htlapon. Mindkt bortlapra egyrtelm uen s olvashatan r kell vezetnie a kiad, vagyis jelen esetben az n nevt. A cmlapon a Dokumentum teljes cmnek jl lthatan, tovbb minden egyes sznak azonos szedsben kell megjelennie. Ezen fell, beltsa szerint, tovbbi rszleteket is hozzadhat a bortlapokhoz. Amennyiben az esetleges mdostsok kizrlag a bortlapokat rintik, s feltve, hogy a Dokumentum cme vltozatlan marad, tovbb a bortlapok megfelelnek minden egyb kve l eltekintve sz szerinti reprodukcinak mino sl. telmnynek, gy a sokszorosts etto Abban az esetben, ha a bortlapok brmelyikn megkvetelt szvegrszek tl knt felsorolhossznak bizonyulnnak az olvashat kzzttelhez, gy csak az els o takat kell feltntetnie (amennyi jzan belts szerint elfr) a tnyleges bortn, a tovb oldalakra. biak pedig tkerlhetnek a kvetkezo Amennyiben 100-nl tbb tltszatlan pldnyt tesz kzz, vagy terjeszt a Dokumentumbl, gy kteles vagy egy gppel-olvashat tltsz pldnyt mellkelni minden egyes tltszatlan pldnyhoz, vagy lerni minden egyes tltszatlan pldnyban egy a mdostatlan tltsz pldnyt tartalmaz nyilvnos hozzfrs u szmtgphlzat elrhet osgt, ahonnan brki, anonim mdon, trtsmentesen letltheti azt, sget vlasztja, egy kzismert hlzati protokoll hasznlatval. Ha az utbbi lehet o kteles gondoskodni arrl, hogy attl a naptl kezdve, amikor az utols tltszatlan pldny is terjesztsre kerlt (akr kzvetlenl n ltal, akr kiskereskedelmi forga lomban), a fenti helyen kzztett tltsz pldny mg legalbb egy vig hozzfrhet o legyen a felhasznlk szmra. Megkrjk, mde nem ktelezzk nt arra, hogy minden esetben, amikor nagyobb z pldnyszm terjesztsbe kezd, mr jval ezt megelo oen lpjen kapcsolatba a Doku lk a Dokumentum esetlementum szerz oivel, annak rdekben, hogy megkaphassa to ges feljtott vltozatt.

4. MDOST S
nnek lehet osge van a Dokumentum Mdostott Vltozatnak sokszorostsra s terjesztsre a 2. s 3. szakaszok fenti rendelkezsei alapjn, feltve, hogy a Mdostott

53

Vltozatot kizrlag jelen Licensz feltteleivel sszhangban teszi kzz, ahol a M sget biztostva annak dostott Vltozat a Dokumentum szerept tlti be, ezltal leheto terjesztsre s mdostsra brkinek, aki csak hozzjut egy pldnyhoz. Mindezen fell, a Mdostott Vltozat az albbi kvetelmnyeknek is meg kell, hogy feleljen:

A Cmlapon (s ha van, a bortkon) tntessen fel egy a Dokumentumtl, illetve cmet (melyeknek, ha vannak, a Dokumenbrmely korbbi vltozattl eltro tum El ozmnyek szakaszban kell szerepelnik). Egy korbbi vltozat cmt je engedlyezte azt. csak akkor hasznlhatja, ha annak szerzo

A Cmlapon szerz okknt sorolja fel a Mdostott Vltozatban elvgzett vltozta szertsokrt felel os szemlyeket, vagy entitsokat, tovbb a Dokumentum f o z oi kzl legkevesebb tt (vagy mindet, ha nincsenek ten).

s szemlyt tntesse fel A Cmlapon a Mdostott Vltozat kzzttelrt felelo kiadknt.

A Dokumentum sszes szerz oi jogi gyelmeztetst hagyja rintetlenl.

i jogi megjegyzst, Sajt mdostsaira vonatkozan is tegyen kzz egy szerz o a tbbi ilyen jelleg u gyelmeztets mellett.

Rgtn a szerz oi jogi gyelmeztetseket kvet oen tntessen fel egy kzlemnyt, az albbi Fggelk mintjra, melyben engedlyezi a Mdostott Vltozat felhasznlst jelen Licensz felttelei alapjn.

A fenti kzlemnyben hagyja rintetlenl a Nem Vltoztathat Szakaszok s a rt teljes listjt. szksges Bortszvegek jelen Dokumentum licenszben el o

Mellkelje jelen Licensz egy eredeti pldnyt.

Az El ozmnyek szakaszt, illetve annak cmt szintn hagyja rintetlenl, emellett adjon hozz egy j elemet, amely minimlisan tartalmazza a Mdo k, illetve a kiad nevt, stott Vltozat cmt, kiadsi vt, tovbb az j szerzo a Cmlapon lthatkhoz hasonlan. Amennyiben a Dokumentum nem tartalmaz semmifle El ozmnyek elnevezs u szakaszt, gy hozzon ltre egyet, mely tar k, illetve a kiad talmazza a Dokumentum cmt, kiadsi vt, tovbb a szerz o en adjon hozz egy j, nevt, a Cmlapon lthatkhoz hasonlan; majd ezt kveto a Mdostott Vltozatra vonatkoz elemet, a fentiekkel sszhangban.

Ne tegyen vltoztatsokat a Dokumentumban megadott tltsz pldny nyilvnos hlzati elrhet osgt (ha van ilyen) illet oen, vagy hasonlkpp, a Dokumentum alapjul szolgl korbbi vltozatok hlzati helyre vonatkozan. Ezek az El ozmnyek szakaszban is szerepelhetnek. Csak abban az esetben hagyhatja el sgt, ha azok legkevesebb ngy vvel egyes korbbi vltozatok hlzati elrheto a Dokumentum el ott kszltek, vagy ha maga az alkot engedlyezi azt.

Brmely Ksznetnyilvnts, vagy Ajnlsok szakasz cmt hagyja rintetlenl, tovbb gondoskodjon arrl, hogy azok tartalma s hangvtele az egyes en vltozatlan maradjon. hozzjrulkat, s/vagy az ajnlsokat illeto

A Dokumentum sszes Nem Vltoztathat Szakaszt hagyja rintetlenl, gy cmket, mint tartalmukat illet oen. A szakaszok szmozsa, vagy brmely azzal egyenrtk u jells nem tartozik a szakaszcmek kz. 54

Trljn minden Jvhagys elnevezs u szakaszt. Effajta szakaszok nem kpezhetik rszt a Mdostott Vltozatnak.

Ne nevezzen t semmilyen ltez o szakaszt Jvhagys-ra, vagy olyasmire, mely cmben a Nem Vltoztathat Szakaszokkal tkzhet.

Ha a Mdostott Vltozat j megel oz o szakaszokat tartalmaz, vagy olyan fggel slnek, m nem tartalmaznak a Dokumenkeket, melyek Msodlagos Szakasznak mino tumbl szrmaz anyagot, abban az esetben, beltsa szerint, e szakaszok nmelyikt, vagy akr az sszeset nem vltoztathatknt sorolhatja be. Ehhez nem kell mst tennie, mint felsorolni a szban forg cmeket a Mdostott Vltozat licensznek Nem Vltoztathat Szakaszok listjban. E cmeknek hatrozottan el kell klnlnie minden egyb szakaszcmt ol. Jvhagys elnevezs u szakaszt csak akkor adhat a Dokumentumhoz, ha az kizrlag a Mdostott Vltozatra utal megjegyzseket tartalmaz pldul msok recenziira vonatkozan, vagy hogy egy szervezet a szveget egy standard mrvad dencijaknt ismerte el. Cmlap-szveg gyannt egy legfeljebb t szbl ll szvegrszt adhat meg, a Htlap-szveg esetn pedig 25 szt f uzhet a Mdostott Vltozat Bortszvegeinek vghez. Brmely entits csak s kizrlag egy Cmlap- s egy Htlap-szvegrszt adhat (akr kzvett on keresztl) a Dokumentumhoz. Ha a dokumentum mr eleve rendelkezik Bortszveggel, akr azrt, mert azt korbban n adta hozz, vagy mert l, abban az esetben nincs leheto sg jabb valaki ms nn keresztl gondoskodott erro Bortszveg hozzadsra; a rgit mindazonltal lecserlheti, abban az esetben, ha annak kiadja egyrtelm uen engedlyezi azt. v A Dokumentum szerz oje/i s kiadja/i jelen Licensz alapjn nem teszik leheto nevk nyilvnos felhasznlst egyetlen Mdostott Vltozat tmogatsa, vagy tmogatottsga rdekben sem.

5. KOMBINLT DOKUMENTUMOK
nnek lehet osge van a Dokumentum egyb, e Licensz hatlya alatt kiadott dokumentumokkal val kombinlsra a 4. szakasz mdostott vltozatokra vonatkoz rendelkezsei alapjn, feltve, hogy a kombinci mdosts nlkl tartalmazza az eredeti dokumentumok sszes Nem Vltoztathat Szakaszt, s hogy azok mind Nem Vltoztathat Szakaszknt kerlnek felsorolsra a kombinlt munka licenszben. A kombinlt munknak jelen Licensz mindssze egy pldnyt kell tartalmaz Nem Vltoztathat Szakaszok pedig kivlthatk nia, az egymssal tfedsben lvo egy sszegzett pldnnyal. Amennyiben tbb Nem Vltoztathat Szakasz szerepelne ugyanazon cmmel, m eltr o tartalommal, gy alaktsa t minden egyes szakasz cmt s kiad nevt (ha ismeri), olyan mdon, hogy mgrja zrjelben az eredeti szerzo vagy egy egyedi sorszmot. Ha szksges, a Nem Vltoztathat Szakaszok cmeivel is vgezze el a fenti mdostsokat a kombinlt munka licenszben. zmnyek elneveA kombinlt munkban az eredeti dokumentumok sszes El o El zs u szakaszt ssze kell olvasztania, miltal egy sszefgg o ozmnyek szakasz jn ltre; hasonlkpp kell eljrnia a Ksznetnyilvnts, illetve az Ajnlsok szakaszok tekintetben. Ugyanakkor minden Jvhagys elnevezs u szakaszt trlnie kell.

55

6. DOKUMENTUMGYUJTEMNYEK
nnek lehet osge van a Dokumentumbl, illetve brmely egyb, e Licensz hatlya alatt kiadott dokumentumbl gy ujtemnyt ltrehozni, s az egyes dokumentumokban tall hat licenszeket egyetlen pldnnyal kivltani, feltve, hogy a gy ujtemnyben szerepl o sszes dokumentum esetn minden ms tekintetben kveti jelen Licensz feltteleit, azok sz szerinti sokszorostsra vonatkozan. l, Tetszse szerint ki is emelhet egy meghatrozott dokumentumot a gy ujtemnyb o tovbb terjesztheti azt jelen Licensz felttelei alapjn, feltve, hogy a szban forg dokumentumhoz mellkeli e Licensz egy pldnyt, s minden egyb tekintetben betartja jelen Licensz el orsait a dokumentum sz szerinti sokszorostsra vonatkozan.

7. SSZEFUZS FGGETLEN MUNKKKAL


A Dokumentum s annak szrmazkainak klnll, vagy fggetlen dokumentumokkal, illetve munkkkal val sszef uzse egy kzs trolsi, vagy terjesztsi egysgen, egszben nem tekinthet o a Dokumentum Mdostott Vltozatnak, feltve, hogy az sszef uzs nem lesz szerz oi jogvdett. Az effajta sszef uzs eredmnyeknt sszegzs jn ltre, m jelen Licensz nem rvnyes az abban a Dokumentummal egytt szerepl o nll munkkra, hacsak azok nem a Dokumentum szrmazkai. Amennyiben a 3. szakasz Bortszvegekre vonatkoz rendelkezsei alkalmazhatk a Dokumentum e pldnyaira, s a Dokumentum a teljes sszegzsnek kevesebb, mint egynegyedt teszi ki, gy a Dokumentum Bortszvegeit olyan mdon is el lehet helyezni, hogy azok csak magt a Dokumentumot fogjk t. Minden ms esetben a teljes sszegzs bortlapjain kell feltntetni a fenti szvegeket.

8. FORDT S
, gy ht a Dokumentum lefordtott pldA fordts egyfajta mdostsnak tekintheto k. A Nem Vltoztathat Szakaszok nyai a 4. szakasz rendelkezsei alapjn terjesztheto i jogtulajdonostl, mindazonltal kzzlefordtsa kln engedlyt ignyel a szerzo teheti a lefordtott vltozatokat is abban az esetben, ha az eredeti Nem Vltoztathat Szakaszokat is belefoglalja a munkba. E Licensz lefordtsra ugyanezek a felttelek rvnyesek, vagyis a lefordtott vltozat csak akkor jelenhet meg, ha mellette ott van az eredeti, angol nyelv u Licensz szvege is. Amennyiben eltrs mutatkozna az ere deti vltozat, illetve a fordts kztt, gy a Licensz angol nyelv u eredetije tekintend o mrvadnak.

9. MEGSZUNS
A jelen Licenszben egyrtelm uen kijellt kereteken kvl tilos a Dokumentum brminem u sokszorostsa, mdostsa, allicenszelse, vagy terjesztse. Minden ezzel szembeni sokszorostsi, mdostsi, allicenszelsi, vagy terjesztsi ksrlet a jelen Licenszben meghatrozott jogok automatikus megsz unst vonja maga utn. Azok a fe-

56

lek, ugyanakkor, akik nn keresztl jutottak msolathoz, vagy jogosultsgokhoz, nem rsait. vesztik el azokat, amg maradktalanul betartjk e Licensz elo

10. JELEN LICENSZ JVOBENI JAVT SAI


r Megtrtnhet, hogy a Szabad Szoftver Alaptvny ido ol id ore fellvizsglt s/vagy j l. E verzik szellemiverzikat bocst ki a GNU Szabad Dokumentcis Licenszbo sge hasonl lesz jelen vltozathoz, m rszleteikben eltrhetnek, j problmk, j agglyok felmerlse okn. V.: http://www.gnu.org/copyleft/ A Licensz minden vltozata egyedi verziszmmal van elltva. Ha a Dokumentum jelen Licensz egy konkrt, szmozott verzijra, vagy brmely jabb verzira hivatkozik, gy nnek a szban forg vltozat, vagy brmely jabb a Szabad Szoftver sge Alaptvny ltal (nem vzlatknt) publiklt verzi feltteleinek kvetsre lehet o van. Ha a Dokumentum nem ad meg semmilyen verziszmot, gy brmely a Szabad Szoftver Alaptvny ltal valaha (nem vzlatknt) publiklt vltozat megfelel.

FGGELK: A Licensz alkalmazsa sajt dokumentumaira


Ha e Licenszet egy n ltal rt dokumentumban kvnja hasznlni, akkor mellkelje i jogi s licensz hozz a Licensz egy pldnyt, tovbb vezesse r az albbi szerz o en: kzlemnyeket, rgtn a cmlapot kveto

Copyright c V AZ N NEVE. E kzlemny felhatalmazst ad nnek jelen dokumentum sokszorostsra, terjesztsre s/vagy mdostsra a Szabad Szoftver Alaptvny ltal kiadott GNU Szabad Dokumentcis Licensz 1.1-es, vagy brmely azt kvet o verzijnak felttelei alapjn. A Nem Vltoztathat Szakaszok neve SOROLJA FEL A CMKET , a Cmlap-szvegek neve LISTA, a Htlapszvegek neve pedig LISTA. E licensz egy pldnyt a GNU Szabad Dokumentcis Licensz elnevezs u szakasz alatt tallja. Ha a szvegben nincsenek Nem Vltoztathat Szakaszok, gy rjon nincs Nem Vltoztathat Szakasz-t, ahelyett, hogy egyenknt felsoroln azokat. Ha nincsenek Cmlap-szvegek, akkor rjon nincs Cmlap-szveg-et, ahelyett, hogy a Cmlapszvegek neve LISTA, s hasonlkpp jrjon el a Htlap-szvegek esetben is. Amennyiben a dokumentum halad programkd-pldkat is tartalmaz, gy azt javasoljuk, hogy e pldkat egy vlasztsa szerinti szabad szoftver licensz alatt kzlje v tegye a kdok mint pldul a GNU ltalnos Felhasznli Licensz , hogy lehet o szabad szoftverekben val alkalmazst.

57

Htlapszveg
Ezen dokumentum eredetije kszlt 2001-2002-ben a Linux-Felhasznlk Magyarorszgi Egyeslete gondozsban a MEH IKB pnzgyi tmo s msolhat a GNU Szabad gatsval. A dokumentum szabadon terjesztheto Dokumentcs Licensz felttelei alapjn.

58

You might also like