Кто знает Perl?

Lord Maverik
На сайте с 15.04.2003
Offline
471
561

Дан набор строк.

В них может встречаться вот такое:

120 c0-4a-00-65-3b-db DYNAMIC Hardware Ethernet1/20

Как мне все такие строки распарсить?

Нужно получить отдельно первую цифру, 120, и далее мак адрес.

Причем мак привести к виду: c04a.0065.3bdb

У меня с перлом вообще тяжко, а надо.

Спасибо за помощь :)

---------- Добавлено 13.08.2016 в 12:21 ----------

Как привести к виду нашел.

@mac =~ s/(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})/$1$2.$3$4.$5$6/;


---------- Добавлено 13.08.2016 в 12:22 ----------

Собственно как разбить строку тоже нашел:

my @row = split /\s+/, $_;

Вопрос в том, как проверить что в строке есть мак адрес.

Я понимаю вопрос дилетантский, но надо :)

RedMall.Ru (https://redmall.ru) - Товары из Китая (Таобао, Tmall) с проверкой качества, скидка для форумчан 7% Партнерская программа 2 уровня: 5% + 5%. Подробнее. (https://redmall.ru/about/partner/)
D
На сайте с 07.11.2000
Offline
228
#1

Lord Maverik,

Lord Maverik:

@mac =~ s/(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})/$1$2.$3$4.$5$6/;
Вопрос в том, как проверить что в строке есть мак адрес.

Этой же строкой:

# $item - переменная со строкой для проверки

if ($item=~/(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})/ ){
print "yes";
}
[umka]
На сайте с 25.05.2008
Offline
456
#2

Всё вместе с первой цифрой:


$str="120 c0-4a-00-65-3b-db DYNAMIC Hardware Ethernet1/20";
if ($str=~/^(\d+)\s+(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})/){
$id=$1;
$mac="$2$3.$4$5.$6$7";
}
Лог в помощь!
bbon
На сайте с 01.04.2006
Offline
168
#3

Если быть совсем занудным, то для mac-адреса, с маленькими буковками, более кошерно вместо (\w{2}) использовать ([a-f\d]{2}) и крышечка ^ - лишняя, если строка не гарантированно начинается с искомого выражения

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий