шаблон для sed

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

шаблон для sed

Непрочитанное сообщение Andy » 2010-08-30 14:30:28

Есть скрипт, в пременные которого попадают имя сетевой карты
и ее порядковый номер.

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

bash-3.00# dladm show-dev 
bge0            link: up        speed: 1000  Mbps       duplex: full
bge1            link: unknown   speed: 0     Mbps       duplex: unknown
bge2            link: up        speed: 1000  Mbps       duplex: full
bge3            link: unknown   speed: 0     Mbps       duplex: unknown
bash-3.00#
Из имени карты и номера, формируется сетевой интерфес для неглобальной зоны,

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

bash-3.00# dladm show-dev | awk '{print $1}' | grep bge | tr -d "[a-z]"
0
1
2
3
bash-3.00# dladm show-dev | awk '{print $1}' | grep bge | tr -d "[0-9]"
bge
bge
bge
bge
bash-3.00#
Все хорошо, пока имя карты bnx или bge. Однако, если имя карты e1000g, то я получаю
совсем другие результаты. Вопрос, каким должно быть регулярное выражение, которое бы точно
вырезало имя карты?

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

bash-3.00# dladm show-dev
e1000g0         link: up        speed: 1000  Mbps       duplex: full
e1000g1         link: up        speed: 1000  Mbps       duplex: full
e1000g2         link: up        speed: 1000  Mbps       duplex: full
e1000g3         link: up        speed: 100   Mbps       duplex: full
bash-3.00# dladm show-dev
Цифры, после названия карты, так же необходимы.
p.S:

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

bash-3.00# cat /etc/release 
                       Solaris 10 10/09 s10x_u8wos_08a X86
           Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                           Assembled 16 September 2009
bash-3.00# 
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

x6e6564
проходил мимо

Re: шаблон для sed

Непрочитанное сообщение x6e6564 » 2010-08-31 8:10:34

Насколько верно не знаю.

1. Этот способ не очень корректен..

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

sed 's/^[a-z].*[a-z]//'
2.

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

sed 's/[0-9]\{1,\}$//'
проверял под бсд:

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

> echo bge0 bge12 e1000g0 e1000g123 | xargs -n 1 | sed 's/^[a-z].*[a-z]//'
0
12
0
123
> echo bge0 bge12 e1000g0 e1000g123 | xargs -n 1 | sed 's/[0-9]\{1,\}$//'
bge
bge
e1000g
e1000g

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: шаблон для sed

Непрочитанное сообщение Andy » 2010-08-31 9:22:14

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

bash-3.00# dladm show-dev
e1000g0         link: up        speed: 1000  Mbps       duplex: full
e1000g1         link: up        speed: 1000  Mbps       duplex: full
e1000g2         link: up        speed: 1000  Mbps       duplex: full
e1000g3         link: up        speed: 100   Mbps       duplex: full
bash-3.00# dladm show-dev | awk '{print $1}'
e1000g0
e1000g1
e1000g2
e1000g3
bash-3.00# dladm show-dev | awk '{print $1}' | xargs -n 1
e1000g0
e1000g1
e1000g2
e1000g3
bash-3.00# dladm show-dev | awk '{print $1}' | xargs -n 1 | sed 's/[0-9]\{1,\}$//'
e1000g
e1000g
e1000g
e1000g
bash-3.00#
Большое спасибо! Вроде работает, надо в скрипт вставить и поглядеть в боевых условиях.

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

sed 's/[0-9]\{1,\}$//'
Это означает "с первой цифры и до конца"?
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

x6e6564
проходил мимо

Re: шаблон для sed

Непрочитанное сообщение x6e6564 » 2010-09-01 10:52:33

Примерно, с первой цифрового символа с конца и все последующие цифровые до не цифрового символа, если нет ограничения.
после запятой можно поставить ограничение в кол-ве символов:

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

echo e1000g12 e1000g123 | xargs -n 1 | sed 's/[0-9]\{1,2\}$//'
e1000g
e1000g1
Если интерфейсов не больше 10-ти, то и так можно:

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

sed 's/[0-9]$//'