regexp v bashi
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Sobota Květen 28 15:39:36 CEST 2005
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.
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.
3. Nekdy muze byt lepsi (rozumej kratsi a srozumitelnejsi) misto
"echo S | grep A" pouzit "expr S : A".
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux