Säännöllisistä lausekkeista egrepissä.

Kirjoittanut Zeph Grunschlag

egrep on lyhenne sanoista ”Extended Global Regular Expressions Print”. Se on ohjelma, joka skannaa määritellyn tiedoston rivi riviltä ja palauttaa rivit, jotka sisältävät tietyn säännöllisen lausekkeen mukaisen kuvion.

Vakiomuotoinen egrep-komento näyttää seuraavalta:

egrep<flags> ’<regularexpression>’ <filename>

Joitakin yleisiä lippuja ovat: -n tulostaa rivinumeron ennen jokaisen osuman tulostusta, -v ottaa säännöllisen lausekkeen komplementin (eli palauttaa rivit, jotka eivät täsmää) ja -l tulostaa niiden tiedostojen tiedostonimet, joiden rivit täsmäävät lausekkeeseen.

Säännölliset lausekkeet tulevat omana egrep-muunnoksenaan (tämä on hyvin samankaltainen kuin säännölliset lausekkeet, jotka löytyvät emacsissa, perlissä, jne.)

(Kreikkalainen kirjain ε (epsilon) edustaa tyhjää merkkijonoa)

Yksi tärkeimmistä eroista egrep-säännöllisilmausten ja teoreettisten säännöllisten lausekkeiden välillä on se, että egrep:ssä täsmäämiset voivat esiintyä missä tahansa merkkijonon sisällä, kun taas teoreettisessa käytössä täsmäämiset alkavat aina merkkijonon ensimmäisestä merkistä ja päättyvät viimeiseen merkkiin. Esimerkiksi merkkijono 000001000. egrepissä säännöllinen lauseke 010 antaa osuman; toisaalta teoreettinen säännöllinen lauseke 010 ei vastaa 000001000:aa, koska 010 ja 000001000 eivät ole yhtä suuria. Egrepin 010:n teoreettinen vastine on (0+1)*010(0+1)*. Entä jos haluat itse asiassa ottaa huomioon merkkijonojen alun ja lopun? egre tarjoaa sinulle alun määrittelyyn caret-symbolin ^ ja lopun määrittelyyn dollarisymbolin $. Teoreettisen 010:n egrep-ekvivalentti on siis ^010$ .

Toinen hyödyllinen egrepsymbolipari ovat sananrajat \< ja \>, jotka vastaavasti merkitsevät sanan alkua ja loppua.

Merkkijoukon tai -alueen määrittämiseen käytetään hakasulkeita. Joukon erottamiseen käytetään hattusymbolia ^ ensimmäisenä merkkinä. Esimerkiksi

  • on joukko { a, 9, A, 0, 5 }.
  • on täydentävä joukko ASCII – { a, 9, A, 0, 5 } (kaikki paitsi a, 9, A, 0 ja 5).
  • on kaikkien pienaakkosten joukko { a, b, c, d, …, z }
  • on kaikkien ASCII-kirjainten joukko lukuun ottamatta pieniä kirjaimia, numeroita välillä 4-9 ja isoja kirjaimia Q ja R.

Muutama esimerkki:

  • egrep ’^(0|1)+ +$’ searchfile.txt

sovittaa kaikki searchfile.txt:n rivit, jotka alkavat ei-tyhjällä bittijonolla, jota seuraa välilyönti, jota seuraa ei-tyhjä aakkosellinen sana, joka päättää rivin

.

Vastaa

Sähköpostiosoitettasi ei julkaista.