Billy Holmes schrieb:
> brullo nulla wrote:
>> Wow. You evil geniuses of regular expressions! °_°
> 
> can even shorten it with just one sed expression:
> 
> /sbin/ifconfig eth0 | sed -n 's/^.*inet addr:\([^ ]*\) .*$/\1/p'

Doesn't work, as it makes wrong assumptions. It assumes, that
there's string "inet addr:". For example in LANG=de_DE, that's
wrong:

[EMAIL PROTECTED] ~ $ /sbin/ifconfig ra0
ra0       Protokoll:Ethernet  Hardware Adresse 00:14:A5:00:AE:D2
          inet Adresse:192.168.1.11  Bcast:192.168.1.31  Maske:255.255.255.224
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12234 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6965 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:11 Sendewarteschlangenlänge:1000
          RX bytes:18131234 (17.2 Mb)  TX bytes:665533 (649.9 Kb)
          Interrupt:5

To fix that, the locale should be shanged, eg. like this:

$ LC_ALL=C /sbin/ifconfig ra0

Let's make a different assumption, which is independent of
the locale - IP is after the 1st : in the 2nd line. One
solution:

[EMAIL PROTECTED] ~ $ /sbin/ifconfig ra0 | head -n 2 | tail -n 1 | sed 
's|.*:\(.*\) .*:.*:.*|\1|'
192.168.1.11

Doing away with "tail -n 1", as sed can do that:

[EMAIL PROTECTED] ~ $ /sbin/ifconfig ra0 | head -n 2 | sed -e '$!d' -e 
's|.*:\(.*\) .*:.*:.*|\1|'
192.168.1.11

"head" is also useless:

[EMAIL PROTECTED] ~ $ /sbin/ifconfig ra0 | sed -n 2p | sed -e '$!d' -e 
's|.*:\(.*\) .*:.*:.*|\1|'
192.168.1.11

But I actually don't quite like the regexp - it's too long... With
perl, I'd use a "non-gready" .*, like so:

[EMAIL PROTECTED] ~ $ /sbin/ifconfig ra0 | sed -n 2p | sed -e '$!d' | perl -pe 
's|.*?:(.*?) .*|$1|'
192.168.1.11

How to do it more ellegant?

Alexander Skwar
-- 
gentoo-user@gentoo.org mailing list

Reply via email to