Regulaaravaldised: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
Line 67: Line 67:


== Linuxi utiliit grep ==
== 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, ...
'''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.
Näitlikkuse jaoks loome faili '''test''', kuhu kirjutame järgnevad read.

Revision as of 20:09, 11 November 2012


Eellugu

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.

Sissejuhatus regulaaravaldistesse

Regulaaravaldis (regular expression; regexp) on olemuselt string (elemendi- või märgijada [1]), 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. [2]

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

  • + - 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

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

Kasutatud kirjandus

http://vallaste.ee/sona.asp?Type=UserId&otsing=495

http://www.cyberciti.biz/tips/unix-linux-regular-expressions-regex-howto-tutorial.html


(Carolys materjal)

UNIX juhend - Regulaaravaldised http://www.eenet.ee/EENet/assets/docs/abs/mall.html#regexp

Kuutõrvaja http://kuutorvaja.eenet.ee/programmeerimine/regulaaravaldised.html

Regular expression http://en.wikipedia.org/wiki/Regular_expression