Непонятка с регулярными выражениями (grep)

Модератор: Модераторы разделов

Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Непонятка с регулярными выражениями

Сообщение Voice »

Значит суть проблемы в следующем.
Хочу получить IP адрес интерфеса следующим образом:

Код: Выделить всё

[root@host116 PEAR] # ifconfig eth0 | grep 'inet addr' | grep -o ':[0-9\.]*'
:192.168.15.116
:192.168.15.255
:255.255.255.0
[root@host116 PEAR] # ifconfig eth0 | grep 'inet addr' | grep -o '[0-9\.]*'
[root@host116 PEAR] #

Почему с двоеточием оно работает верно, а без него нет?
Вроди ж как все правильно. :unsure:

P.S.
Может есть еще какой способ узнать адрес? Желательно без прав рута.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Непонятка с регулярными выражениями

Сообщение serzh-z »

Код: Выделить всё

... | sed 's/.*:\(.*\) .*/\1/'
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: Непонятка с регулярными выражениями

Сообщение Alexxx »

serzh-z писал(а):
12.11.2007 18:14

Код: Выделить всё

... | sed 's/.*:\(.*\) .*/\1/'

Во, классно! А я, извращенец, понаписал, млин:

Код: Выделить всё

[alex@almhs ~]$ cat /etc/ppp/scripts/pppip
#!/bin/bash
#

PPPIP=`/sbin/ifconfig ppp0 | grep inet | sed s/^.*addr:// | sed "s/ .*$//"`
.  .  .
пасибки (: , пошёл делать rsync "man sed" /dev/brain , мабуть помогет...
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Непонятка с регулярными выражениями

Сообщение Voice »

serzh-z, спасибо! :)

А почему все таки grep не работал как пленировалось... :blush:
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Непонятка с регулярными выражениями

Сообщение serzh-z »

Voice писал(а):
12.11.2007 18:52
А почему все таки grep не работал как пленировалось...
Хрен его знает. Мне тоже интересно. В UNIX довольно много вариантов регекспов. И в каждом всё работает немного не так как в других.
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Непонятка с регулярными выражениями

Сообщение sergio »

Voice писал(а):
12.11.2007 17:53

Код: Выделить всё

[root@host116 PEAR] # ifconfig eth0 | grep 'inet addr' | grep -o ':[0-9\.]*'
[root@host116 PEAR] # ifconfig eth0 | grep 'inet addr' | grep -o '[0-9\.]*'
[root@host116 PEAR] #

Почему с двоеточием оно работает верно, а без него нет?
Вроди ж как все правильно. :unsure:


Непраальна. :)
Потому что без двтчия это регулярное выражение совпадает с чем угодно на свете, вернее - с любой пустой строкой (наприм с позицией между двумя любыми символами), а потому бессмысленно для -о. Почему греп что-угодно-на-свете не копирует как-есть на выход - не знаю, но при включенной опции -о - не копирует ничего, это его тонкости, видимо. Без -о копирует все строки, как и ожидалось. Ну или надо как следует подумать логически. :)
$ ifconfig | grep 'inet addr' | egrep -o 'addr:[0-9\.]{0,15}' # работает
$ ifconfig | grep 'inet addr' | egrep -o '[0-9\.]{0,15}' # нифига
$ ifconfig | grep 'inet addr' | egrep -o '[0-9\.]{7,15}' # работает
И с плюсиком будет работать. Со звездочкой также как второй вариант где от нуля - не будет.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Непонятка с регулярными выражениями

Сообщение Voice »

sergio, ситуацию прояснил. Спасибо.
Вот оно в чем прикол то оказывается ))
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Непонятка с регулярными выражениями

Сообщение sash-kan »

Voice, а выполните-ка такую командочку:
$ sudo ip a a 10.0.0.100/24 dev eth0
и попробуйте найти ifconfig-ом адрес 10.0.0.100
что, не получается? гы гы.
а адресок-то есть! и работает, как полагается.
вот только ifconfig сусликов, увы, не видит (:
вывод: не пользуйтесь не подходящим для работы инструментарием. я про ifconfig и иже с ним.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Sleeping Daemon
Сообщения: 1450

Re: Непонятка с регулярными выражениями

Сообщение Sleeping Daemon »

Voice писал(а):
12.11.2007 18:52
serzh-z, спасибо! :)

А почему все таки grep не работал как пленировалось... :blush:

Потому, что * означает 0 или более раз. И всё выражение в [] может встречаться 0 или более раз.
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Непонятка с регулярными выражениями

Сообщение Voice »

sash-kan писал(а):
13.11.2007 00:48
вывод: не пользуйтесь не подходящим для работы инструментарием. я про ifconfig и иже с ним.

А как лучше можна програмно узнать IP?
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Непонятка с регулярными выражениями

Сообщение Subj »

ifdata -pa eth0
Building better software with Ada
Спасибо сказали: