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