← Back to team overview

sslug-teknik team mailing list archive

Re: Regular Expressions.. commandline stuff..

 

On Fri, 23 Mar 2001 15:24:33 +0100, Joern Thyssen wrote:
>> route -n | grep "U " | grep -v lo | cut -c 1-16,33-47 | perl -p -e
>> 's/(([0-9]{1,3}\.){3}[0-9]{1,3})\W+(([0-9]{1,3}\.){3}[0-9]{1,3})\W+/\1\/\3/;'
>
>Ups, \W skulle have været \s

Der er så vidt jeg kan se altid tale om en række mellemrum-separarede kolonner
her. Så det er nemmere at bruge -a parameteren til perl, som splitter linien
om i en array (@F):

route -n | perl -lane 'print "$F[0]/$F[2]" if $F[3] eq "U" and $F[7] ne "lo"'

Print kolonne #0 / #2 hvis #3 er "U" og #7 er IKKE lo.

Dog ville jeg måske bruge ifconfig i stedet for - der kunne jo være en extra
route sat op:

ifconfig | perl -00ne '
print"$2/$3" if /^(\w+).*inet addr:(\S+).*Mask:(\S+)/s and $1 ne "lo"
'

-00 switchen får Perl til at bruge "paragraph mode" hvor en linie betragtes
som at værende termineret med 2 newlines. Praktisk ved ifconfig, hvor
information om hvad interfacenavn og hvad dens adresse er står på forskellige
linier.

I mere obskur form:

ifconfig|perl -00ne'/^(\w+).*addr:(\S+).*Mask:(\S+)/s&&$1ne lo?print"$2/$3":0'


PS: Jeg brugger Perl til "programmer" på een linie, og Python til dem på 2
linier og derover ;)


-- 
=======================================================================
<erwin@xxxxxxxxxxxxx>           Herlev, Denmark       Software Designer
<URL:http://www.andreasen.org/>       <*>         LASAT^WEicon Networks
=======================================================================


References