2014-11-19 2 views
0

EDIT: Мне сложно выразить себя. Позвольте мне начать снова. У меня есть цикл, который прочитать строку из файла:Perl regexp matching

GigabitEthernet0/0 
GigabitEthernet0/1 
GigabitEthernet0/2 
Serial0/0/0:0 
Serial0/0/0:0.100 

И я пытаюсь некоторые регулярное выражение, чтобы получить интерфейсной Serial0/0/0: 0

if ($lineSplitter[2] =~ /Serial0(.*):0[^(.\d)](.*)/ && $interfacebool eq "false"){ 
    $interfaceNeeded = $lineSplitter[2] ; 
} 

Но это не за работой. Я попробовал несколько вещей на онлайн REGEXP тренажере, но все же .. Без результата ... Все, что я хочу, чтобы получить главный интерфейс (Serial0/0/0: 0), не суб-интерфейс (Serial0 /0/0:0.100)

ОЖИДАЕТСЯ ПЕРЕМЕННАЯ:

Serial0/0/0:0 

Я не хочу, чтобы заменить или получить часть суб-интерфейса. Я хочу, чтобы regexp соответствовал основному интерфейсу без соответствия под-одному

Извините за это недоразумение.

+0

Каков ваш ожидаемый выход? –

+0

Должны ли мы понимать, что означает «интерфейс» и «под-интерфейс»? – TLP

+0

Извините, я отредактировал, чтобы сделать его более понятным –

ответ

0

Если вы хотите ограничить свой матч, использовать анкеры, ^ соответствовать начало строки, а $ соответствовать конец строки:

/^Serial0(.*):0$/ 

Это будет только соответствовать вашим Serial строки, которые заканчиваются :0.

0

Попробуйте следующий фрагмент:

perl -ne 'print if $_ =~ /Serial0\/\d\/\d:\d$/' data.txt 

будет соответствовать Serial0/x/x:x (например, не Serial0/0/0:0.100)