Страница 1 из 1

шаблон для sed

Добавлено: 2010-08-30 14:30:28
Andy
Есть скрипт, в пременные которого попадают имя сетевой карты
и ее порядковый номер.

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

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# 

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

Добавлено: 2010-08-31 8:10:34
x6e6564
Насколько верно не знаю.

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

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

Добавлено: 2010-08-31 9:22:14
Andy

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

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,\}$//'
Это означает "с первой цифры и до конца"?

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

Добавлено: 2010-09-01 10:52:33
x6e6564
Примерно, с первой цифрового символа с конца и все последующие цифровые до не цифрового символа, если нет ограничения.
после запятой можно поставить ограничение в кол-ве символов:

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

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

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

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