Ero sivun ”Säännöllinen lauseke” versioiden välillä
Siirry navigaatioon
Siirry hakuun
universialisuudesta "+" pois, lausejärjestys; x+=xx*; rivinvaihto
(LC_ ja operaattori * basic-syntaksissa) |
LP (keskustelu | muokkaukset) (universialisuudesta "+" pois, lausejärjestys; x+=xx*; rivinvaihto) |
||
Rivi 1: | Rivi 1: | ||
'''Säännöllinen lauseke''' (engl. '''regular expression''', '''regexp''') on yksinkertainen merkkijonokieli, joka voi joko ''vastata'' tai ''olla vastaamatta'' jotain toista merkkijonoa. Linux- ja Unix-järjestelmissä säännöllisiä lauskkeista on suurta hyötyä [[komentorivi]]ä käytettäessä esimerkiksi merkkijonojen etsimis- ja korvaustoiminnoissa. Niiden voidaankin sanoa olevan [[putki]]ttamiseen yhdistettynä tärkeimpiä työkaluja, joita komentorivin edistynyt käyttö edellyttää. | '''Säännöllinen lauseke''' (engl. '''regular expression''', '''regexp''') on yksinkertainen merkkijonokieli, joka voi joko ''vastata'' tai ''olla vastaamatta'' jotain toista merkkijonoa. Linux- ja Unix-järjestelmissä säännöllisiä lauskkeista on suurta hyötyä [[komentorivi]]ä käytettäessä esimerkiksi merkkijonojen etsimis- ja korvaustoiminnoissa. Niiden voidaankin sanoa olevan [[putki]]ttamiseen yhdistettynä tärkeimpiä työkaluja, joita komentorivin edistynyt käyttö edellyttää. | ||
Tässä artikkelissa on esitetty johdatus säännöllisiin lausekkeisiin siten, miten komentorivityöklu <tt>[[grep]]</tt> ne ymmärtää ''laajennettussa'' (engl. extended) tilassa | Tässä artikkelissa on esitetty johdatus säännöllisiin lausekkeisiin siten, miten komentorivityöklu <tt>[[grep]]</tt> ne ymmärtää ''laajennettussa'' (engl. extended) tilassa. Perusoperaattorit (<tt>*</tt>, <tt>?</tt>, sulut) ovat ''universaaleja'', eli kaikki toteutukset tukevat niitä. Kaikissa säännöllisten lausekkeiden toteutuksissa syntaksi ei kuitenkaan ole aivan sama. | ||
Säännöllisistä lausekkeista on yleisesti käytössä kolme tyyppiä: ''tavallinen'' (engl. basic), ''laajennettu ''(engl. extended) ja ''[[Perl]]-tyyppinen'' | Säännöllisistä lausekkeista on yleisesti käytössä kolme tyyppiä: ''tavallinen'' (engl. basic), ''laajennettu ''(engl. extended) ja ''[[Perl]]-tyyppinen''. Tässä ohjeessa esitetty syntaksi on yhteensopiva Linuxin [[GNU]]-grepin laajennetun syntaksin kanssa jollei toisin mainita. Varsinkin useassa järjestelmässä käytettäviä [[skripti|skriptejä]] kirjoitettaessa täytyy olla huolellinen siinä, mitkä rakenteet ovat uudempia laajennoksia. | ||
grep käsittelee syötettä rivi riviltä. Toisissa ohjelmissa saatetaan käsitellä rivinvaihtoa tavallisena merkkinä. | |||
Säännöllisiä lausekkeita ei tule sekoittaa tiedostonimi-jokereihin (glob), joilla on samantapainen toiminnallisuus (vrt. <tt>*</tt> ja <tt>.*</tt>). Tiedostonimijokereita ja säännöllisiä lausekkeita voi hydöyntää usein samoissa yhteyksissä, mutta säännölliset lausekkeet ovat tiedostonimijokereita ilmaisuvoimaisempia. | Säännöllisiä lausekkeita ei tule sekoittaa tiedostonimi-jokereihin (glob), joilla on samantapainen toiminnallisuus (vrt. <tt>*</tt> ja <tt>.*</tt>). Tiedostonimijokereita ja säännöllisiä lausekkeita voi hydöyntää usein samoissa yhteyksissä, mutta säännölliset lausekkeet ovat tiedostonimijokereita ilmaisuvoimaisempia. | ||
Rivi 83: | Rivi 85: | ||
'''a'''cccca | '''a'''cccca | ||
bba | bba | ||
Lausekkeen x+ voi kirjoittaa myös xx*, jolloin <tt>+</tt>-operaattoria ei tarvitse käyttää (se ei sisälly kaikkiin "tavallisen" syntaksin toteutuksiin). | |||
=====Ehdollinen: <tt>?</tt>===== | =====Ehdollinen: <tt>?</tt>===== | ||
Rivi 416: | Rivi 420: | ||
===== Laajennetut säännölliset lausekkeet: egrep ===== | ===== Laajennetut säännölliset lausekkeet: egrep ===== | ||
Esimerkissä käytettiin komentoa <tt>egrep</tt>. Se on oikopolku grepin [[valitsin|valitsimelle]] <tt>-E</tt>, joka ottaa säännöllisten lausekkeiden laajennetun (engl. extended) tuen käyttöön. Normaalissa käytössä (pelkkä komento <tt>grep</tt>) operaattorit <tt>? + {} | (</tt> ja <tt>)</tt> eivät ole käytettävissä, paitsi asettamalla niiden eteen pako-operaattorin <tt>\</tt>. Operaattoriella <tt>* . [] ^</tt> ja <tt>$</tt> on sama erikoismerkitys sekä käytettäessä normaalia (<tt>grep</tt>) että laajennettua (<tt>egrep</tt>) syntaksia. | Esimerkissä käytettiin komentoa <tt>egrep</tt>. Se on oikopolku grepin [[valitsin|valitsimelle]] <tt>-E</tt>, joka ottaa säännöllisten lausekkeiden laajennetun (engl. extended) tuen käyttöön. Normaalissa käytössä (pelkkä komento <tt>grep</tt>) operaattorit <tt>? + {} | (</tt> ja <tt>)</tt> eivät ole käytettävissä, paitsi asettamalla niiden eteen pako-operaattorin <tt>\</tt>. Operaattoriella <tt>* . [] ^</tt> ja <tt>$</tt> on sama erikoismerkitys sekä käytettäessä normaalia (<tt>grep</tt>) että laajennettua (<tt>egrep</tt>) syntaksia, mutta esimerkiksi merkinnöillä <tt>\(</tt> ja <tt>(</tt> siis päinvastainen. | ||
===== Prosessoitu tuloste: awk ===== | ===== Prosessoitu tuloste: awk ===== |