Regulaaravaldised: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
[[Category: Operatsioonisüsteemide administreerimine ja sidumine ]] | [[Category: Operatsioonisüsteemide administreerimine ja sidumine ]] | ||
= | = Sissejuhatus = | ||
See referaat on valminud õppeaine operatsioonisüsteemide administreerimine ja sidumine (I233) raames 2012/2013 õppeaastal. | See referaat on valminud õppeaine operatsioonisüsteemide administreerimine ja sidumine (I233) raames 2012/2013 õppeaastal. | ||
Töö lõplikuks autoriks on Sten Aus (rühm A22), aluseks on võetud Carolys Kallas (rühm A22) referaat aastast 2011. Kuna referaat praktiliselt koosneski ühest lausest, siis viide algsele teosele on eemaldatud. Seda on võimalik vaadata selle lehe Wiki ajaloost. | Töö lõplikuks autoriks on Sten Aus (rühm A22), aluseks on võetud Carolys Kallas (rühm A22) referaat aastast 2011. Kuna referaat praktiliselt koosneski ühest lausest, siis viide algsele teosele on eemaldatud. Seda on võimalik vaadata selle lehe Wiki ajaloost. | ||
Referaadi teema on valitud autori poolt 29. oktoobril 2012. aastal. | Referaadi teema on valitud autori poolt 29. oktoobril 2012. aastal. | ||
'''REFERAADIS TOODUD failide ja koodide näited on esitatud rohelisel taustal kastidega. JUHUL KUI ON TEGEMIST mingi tähelepanu nõudva või soovitusega, on tegemist punakas-roosade kastidega.''' | |||
= Sissejuhatus regulaaravaldistesse = | = Sissejuhatus regulaaravaldistesse = | ||
Line 121: | Line 123: | ||
''Juhin tähelepanu sellele, et automaatselt ei salvestata faili üle, vaid sed väljund kuvatakse standardväljundisse. Et fail automaatselt üle salvestataks on vaja kasutada suunamist (kusjuures seda suunamist, mis loob faili või kustutab selle üle. Vastasel juhul kirjutatakse faili juurde ja säilivad vanad andmed (andmeid saab topelt).'' | ''Juhin tähelepanu sellele, et automaatselt ei salvestata faili üle, vaid sed väljund kuvatakse standardväljundisse. Et fail automaatselt üle salvestataks on vaja kasutada suunamist (kusjuures seda suunamist, mis loob faili või kustutab selle üle. Vastasel juhul kirjutatakse faili juurde ja säilivad vanad andmed (andmeid saab topelt).'' | ||
Antud utiliidi puhul kasutame näideteks faili '''linnad''', kuhu sisse kirjutame järgnevad read: | |||
{|style="background:#FAEBD7; border:1px solid #BABABA; width:500px; margin:3px;" align=centre | {|style="background:#FAEBD7; border:1px solid #BABABA; width:500px; margin:3px;" align=centre | ||
| style="padding:0px 0px 0px 80px; font-family: courier; font-size:10pt;" | tallinn | | style="padding:0px 0px 0px 80px; font-family: courier; font-size:10pt;" | tallinn | ||
Line 143: | Line 145: | ||
|} | |} | ||
Miks viimane rida on asfae? Küll varsti saame teada. | Miks viimane rida on asfae? Küll varsti saame teada. ;) | ||
=== Süntaks ja sed võimalused === | |||
'''sed utiliiti kasutades soovitan tingimused kirjutada ülakomade \'\' vahele. Seda sellepärast, et programmi tööd (ja oma elu) lihtsustada. :) Kui proovite mõne keerukama (tegelikult piisab isegi kustutamise (vt allpool) käsku kasutades) regulaaravaldise kirjutamisel mitte kasutada ülakomasid, siis võite väga kiiresti lõpetada suure errori-kuhja all - teadmata miks.''' | |||
==== Ridade kuvamine ==== | |||
Failist ridade kuvamiseks tuleb kasutada käsku '''q'''. | |||
Alljärgnev kood kuvab meile failist "linnad" esimese rea. | Alljärgnev kood kuvab meile failist "linnad" esimese rea. | ||
Line 156: | Line 162: | ||
Alljärgnev kood kuvab meile failist "linnad" kõik read, peale esimese. | Alljärgnev kood kuvab meile failist "linnad" kõik read, peale esimese. | ||
{|style="background:#FAEBD7; border:1px solid #BABABA; width:500px; margin:3px;" align=centre | {|style="background:#FAEBD7; border:1px solid #BABABA; width:500px; margin:3px;" align=centre | ||
| style="padding:0px 0px 0px 80px; font-family: courier; font-size:10pt;" | | | style="padding:0px 0px 0px 80px; font-family: courier; font-size:10pt;" | sed '1!q' linnad | ||
|} | |} | ||
Asendades näiteks ülal loodud failis asfae sõnaga Kuressaare | Asendades näiteks ülal loodud failis asfae sõnaga Kuressaare | ||
{|style="background:#FAEBD7; border:1px solid #BABABA; width:500px; margin:3px;" align=centre | {|style="background:#FAEBD7; border:1px solid #BABABA; width:500px; margin:3px;" align=centre | ||
| style="padding:0px 0px 0px 80px; font-family: courier; font-size:10pt;" | sed s/asfae/Kuresaare/ linnad | | style="padding:0px 0px 0px 80px; font-family: courier; font-size:10pt;" | sed 's/asfae/Kuresaare/' linnad | ||
|} | |} | ||
* '''s''' tähendab asendamist (ingl k. ''substitute'') | * '''s''' tähendab asendamist (ingl k. ''substitute'') | ||
Line 169: | Line 175: | ||
Windowsis annaks võrrelda seda käsku kui ''"search and replace"'' ehk "otsi ja asenda". | Windowsis annaks võrrelda seda käsku kui ''"search and replace"'' ehk "otsi ja asenda". | ||
==== Kustutamine ==== | ==== Kustutamine ==== | ||
Failist kustutamiseks tuleb kasutada käsku '''d'''. | Failist kustutamiseks tuleb kasutada käsku '''d'''. |
Revision as of 15:12, 16 November 2012
Sissejuhatus
See referaat on valminud õppeaine operatsioonisüsteemide administreerimine ja sidumine (I233) raames 2012/2013 õppeaastal. Töö lõplikuks autoriks on Sten Aus (rühm A22), aluseks on võetud Carolys Kallas (rühm A22) referaat aastast 2011. Kuna referaat praktiliselt koosneski ühest lausest, siis viide algsele teosele on eemaldatud. Seda on võimalik vaadata selle lehe Wiki ajaloost.
Referaadi teema on valitud autori poolt 29. oktoobril 2012. aastal.
REFERAADIS TOODUD failide ja koodide näited on esitatud rohelisel taustal kastidega. JUHUL KUI ON TEGEMIST mingi tähelepanu nõudva või soovitusega, on tegemist punakas-roosade kastidega.
Sissejuhatus regulaaravaldistesse
Regulaaravaldis (regular expression; regexp)[1] on olemuselt string (elemendi- või märgijada [2]), mis sisaldab endas teisi stringe, mis on teatud korra- ja reeglipäraselt üksteise järel ritta seatud. Regulaaravaldisi kasutatakse paljudes kohtades - peamiselt küll UNIX-i laadsetes süsteemides, aga näiteks ka programmeerimiskeeltes nagu näiteks PHP, Perl jt. [3]
Esialgu võib regulaaravaldiste teema tunduda algajale väga keeruline ja raske, kuid fundamentaalteadmiste omandamisel on sellest tööriistast väga palju kasu.
Regulaaravaldistes kasutatavad sümbolid
- [] - märgivalik või vahemik (näide 1: m[aeo]kk tähendab sõnu makk, mekk, mokk; näide 2: versioon[01-03] tähendab versioon01, versioon02, versioon03)
- . - tähemärk (näide: s.en tähendab seen, s@en, s!en, saen, ... ) NB! tähemärke võib ka mitu tükki järjest olla, sellisel juhul tuleb lihtsalt nii mitu punkti lisada, kui mitu tähemärki on vaja
- ^ - rea algus (näide: kui kasutada grep rakendusega ^bat tingimust mingil failil, siis otsitakse selle faili iga rea alguses esinevat fraasi "bat")
- $ - rea lõpp (näide: kui kasutada grep rakendusega sti$ tingimust mingil failil, siis otsitakse selle faili iga rea lõpust esinevat fraasi "sti")
- * - suvaline sümbol (suvaline arv sümboleid (0 kuni lõpmatus)) (näide 1: au* tähendab austraalia, austria, ...; ehk siis tärnist eelnevad sümbolid jäetakse alles; näide 2: find *.* leiab kõik failid, kus sees on punkt)
- \ - sellele sümboline järgnevat metasümbolit võetakse kui tavalist sümbolit (näide: find \^ tähendab, et otsitakse failinime seest ^ märki, mitte ei tähenda see rea alguse sümbolit)
Laiendatud sümbolid
- + - pluss: üks või enam vasakul olevad sümbolit
- ? - küsimärk: null või üks vasakul olevat sümbolit
- | - toru: eelnev või järgnev regulaaravaldis
- () - sulud: grupeerib regulaaravaldisi
- {n,m} - loogad: mitu eelnevat sümbolit
Laiendatud sümbolid on koostatud kasutades EENet lehel leiduvat õpetust.[4]
Regulaaravaldise koostamine
Regulaaravaldiste kasutamiseks (koostamiseks) pole vaja administraatoriõiguseid. Seda loomulikult juhul, kui te ei soovi tegeleda failidega (kohvritega), millele teil õiguseid pole.
Antud punkti läbimiseks tuleb väga kasuks suunamise baasteadmiste omandatus. Kui seda pole, siis võib alljärgneva koodi lugemine osutuda keerulisemaks. Järgmises punktis anname väga lühikese ülevaate, et ühtlustada taset. Aga kuna see on selle juhendi skoobist väljas, siis me sellel teemal väga pikalt ei peatu.
Suunamine (teemaväline)
Mõisted
- standardsisend - klaviatuur
- standarväljund - kuvar (ekraan)
Suunamise süntaks
- > - suunab standardväljundi faili (loob selle või kirjutab üle)
- >> - suunab standardväljundi faili (lisab olemasolevale sisule)
- < - loeb näidatud faili standardsisendisse
- << - loeb järgnevad read standardsisendisse
Linuxi utiliit find
Oleme kodukaustas, meid huvitab esialgu kõik "u"-ga algavad failid ja kaustad. Kasutan find jaoks parameetrit -iname, mis garanteerib, et meie otsingu puhul ei arvestata suur- ega väiketähtede erinevust. Rohkem infot find'i parameetrite kohta leiab, kui kasutate käsku man find
find -iname "u*" |
Otsime parameetri "u[akn]*" järgi. PS! Antud otsingutingimus eeldab, et sellised failid on teie kohvris olemas. Failid on loodud näitlikkuse jaoks. Mingit sisu/otstarvet neil pole.
find -iname "u[akn]*" |
Antud tingimus otsib failid ja kohvrid, mis algavad "ua", "uk" või "un" kombinatsiooniga. See, mis failinimes edasi on, ei oma tähtsust.
Kirjutame selle sama otsingitulemuse kuskile faili.
find -iname "u[akn]*" > otsingutulemus.txt |
Tundub, et midagi ei toimunud (kuna ekraanile midagi ju ei tulnud). Seda sellepärast, et kasutasime suunamist ja kirjutasime tulemuse faili (mis muidu pidi standardväljundisse tulema). Kui kasutada ls käsku, siis näeme, et tekkinud on uus fail nimega "otsingutulemus.txt". Kui see avada näiteks nano utiliidiga, siis leiame sealt seest otsingutulemuse.
Linuxi utiliit grep
Grep on üks enimkasutatavaid utiliite, kus saab väga efektiivselt kasutada regulaaravaldisi. Kui find on kasutusel sellejaoks, et otsida faili- või kohvrinimesid, siis grep on kasutusel, et otsida failide seest mingit fraasi, osa vms.
Näitlikkuse jaoks loome faili test, kuhu kirjutame järgnevad read.
1912
minu rida teine rida 19234 23 s. maiu on piimaauto bla bla veel midagi mul on bemmil uued kummid |
Kasutame grep utiliiti, et leida antud failist mingi fraas. Grep süntaksiga on võimalik tutvuda kasutades käsku man grep.
grep uued test |
Leiame protsesitabelist üles kõik protsessid, mis kuuluvad kasutajale root ja lisame selle tulemuse juurde faili test.
ps -ef | grep ^root >> test |
Grep utiliidi üks hea võimalus on see, et parameetriga -f saab anda mustri, mille järgi otsitakse, ette hoopis mingist failist. Oletame, et meie muster bemm asub failis muster. Sellisel juhul kood peaks nägema välja järgnev.
grep -f muster test |
Linuxi utiliit sed
Regulaaravaldisi kasutatakse veel ka automaatseks tekstitöötluseks. St et kasutaja (inimese) osavõtt sellest protsessist on vajalik ainult regulaaravaldise kirjutamiseks - ülejäänud teeb automaatselt ära programm sed - inglise keeles stream editor, eesti keeles voo muutja.[5]
Kuna sed pole kasutusel tavakasutaja igapäeva töös [6], siis peatume selles punktis vaid peamistel tõdedel.
Juhin tähelepanu sellele, et automaatselt ei salvestata faili üle, vaid sed väljund kuvatakse standardväljundisse. Et fail automaatselt üle salvestataks on vaja kasutada suunamist (kusjuures seda suunamist, mis loob faili või kustutab selle üle. Vastasel juhul kirjutatakse faili juurde ja säilivad vanad andmed (andmeid saab topelt).
Antud utiliidi puhul kasutame näideteks faili linnad, kuhu sisse kirjutame järgnevad read:
tallinn
tartu pärnu viljandi narva jõhvi valga võhma asfae |
Miks viimane rida on asfae? Küll varsti saame teada. ;)
Süntaks ja sed võimalused
sed utiliiti kasutades soovitan tingimused kirjutada ülakomade \'\' vahele. Seda sellepärast, et programmi tööd (ja oma elu) lihtsustada. :) Kui proovite mõne keerukama (tegelikult piisab isegi kustutamise (vt allpool) käsku kasutades) regulaaravaldise kirjutamisel mitte kasutada ülakomasid, siis võite väga kiiresti lõpetada suure errori-kuhja all - teadmata miks.
Ridade kuvamine
Failist ridade kuvamiseks tuleb kasutada käsku q.
Alljärgnev kood kuvab meile failist "linnad" esimese rea.
sed '1q' linnad |
Alljärgnev kood kuvab meile failist "linnad" kõik read, peale esimese.
sed '1!q' linnad |
Asendades näiteks ülal loodud failis asfae sõnaga Kuressaare
sed 's/asfae/Kuresaare/' linnad |
- s tähendab asendamist (ingl k. substitute)
- asfae - osa, mida soovitakse asendada
- Kuresaare - osa, millega asendatakse
Windowsis annaks võrrelda seda käsku kui "search and replace" ehk "otsi ja asenda".
Kustutamine
Failist kustutamiseks tuleb kasutada käsku d.
Soovime näiteks kustutada failist "linnad" kolmanda rea. Selleks kasutame käsku.
sed 3d linnad |
Kui soovitakse kustutada kõik, peale mingi rea, siis on vaja kasutada hüüumärki reanumbri järel. Näiteks kustutame kõik read peale kolmanda.
sed '3!d' linnad |
NB! Pane tähele, et siin on vaja kasutada ülakomasid , et anda sed programmile ette täpne tingimus, mida soovitakse teha!
Asendamine
Mingi rea (stringi) asendamiseks on vaja kasutada sedi käsku s.
Transformeerimine
Lõpetamine
Kasutatud kirjandus
http://vallaste.ee/sona.asp?Type=UserId&otsing=495
http://www.cyberciti.biz/tips/unix-linux-regular-expressions-regex-howto-tutorial.html
http://www.eenet.ee/EENet/assets/docs/abs/mall.html#regexp
http://kuutorvaja.eenet.ee/programmeerimine/regulaaravaldised.html
http://en.wikipedia.org/wiki/Regular_expression