regexp v bashi

Dalibor Straka dast na panelnet.cz
Sobota Květen 28 22:12:42 CEST 2005


On Sat, May 28, 2005 at 03:39:36PM +0200, Pavel Kankovsky wrote:
> On Thu, 26 May 2005 kocek.kvetoslav na vestizol.cz wrote:
> 
> > > > '[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}'
> > >
> > > ./ip_unblock 888.888.888.888
> > 
> > jj, tohle jsem vyresil pomoci sed, awk a dalsi kontroly na rozsah 0-255.
> 
> Jen takove tri poznamky na okraj:
> 
> 1. Lze to udelat ciste grepem, protoze regularni vyraz, kteremu vyhovuji 
> prave cisla 0 az 255, je nasledujici (0|[1-9][0-9]|1[0-9]{2}|2([0-4][0-9]|
> 5[0-5])). Lidsky receno: 0, nebo dve cislice, nebo tri cislice zacinajici 
> 1, nebo tri cislice zacinajici 20 az 24, nebo tri cislice zacinajici 25
> a koncici 0 az 5. Pouzivam pro zjednoduseni syntaxi, kde se pred {, (,
> | apod. nepise \. To (GNU) grep umi, kdyz se zavola jako egrep.
> 
adresu 1.2.3.4 to nezachyti. Misto te nuly by melo byt [0-9].

> 2. Pokud se pouzije dialekt, ktery umoznuje testovat zadany pocet 
> opakovani, pak misto testovani stringu "S" proti vyrazu typu "A\.A\.A\.A"
> lze s vyhodou testovat "S." proti vyrazu "(A\.){4}" a neni tedy treba
> A ctyrikrat opisovat.

Dvakrat kvuli te tecce "(A\.){3}A", nebo ji tam pridat "sed 's/$/./'"
Je to volani programu navic, ale zase zapis je elegantnejsi "(A\.){4}".

Zrovna se ted ucim k Forstovi na unix regularni vyrazy. Takze je to
vytane cviceni. Bohuzel na jeho pisemkach nevyuziji zadne znalosti
unixu...

-- Dalibor Straka


Další informace o konferenci Linux