Perl печатать больше строк

Я новичок в Perl и я хочу напечатать больше, чем просто первое совпадение с регулярным выражением. TXT-файл содержит 57 раз shutdown, с помощью следующего кода я просто получить первый матч, чем он останавливается.

#!/usr/bin/perl
use strict;
use warnings;

use Path::Tiny;
use autodie;

my $dir = path("H:/Perl");

my $file = $dir->child("test.txt");

my $content = $file->slurp_utf8();

my $file_handle = $file->openr_utf8();

(my $test) = $content =~ m/^.+$(?=\s+shutdown)/mg;{
print "$test\n"; 
}

Я пробовал while loop но я не работал Спасибо за помощь.

Изменить: Вот некоторые примеры данных:

interface port-channelxyc
description provdb002
shutdown
switchport access vlan 123
spanning-tree port type edge

interface port-channel456
description provdb002
switchport access vlan 32
spanning-tree port type edge

interface port-channel200
shutdown

я вернулся только: 'description provdb002', затем он останавливается, но я хочу получить также следующий: 'interface port-channel200' и так далее... надеюсь, вы понимаете, о чем я.

1 ответ

ОК, ваши данные выглядят так, как будто они разделены пустой строкой.

Удобно, Perl поддерживает это очень легко, используя $/ и установив его '',

И так вы можете перебрать ваш файл так:

#!/usr/bin/env perl
use strict;
use warnings;

local $/ = '';
while ( <> ) {
   my %this_int = m/([\w\-]+) ?(.*)/g; 

   if ( exists $this_int{'shutdown'} ) { 
       print  $this_int{'interface'}, " ", $this_int{'description'} // ''," is shut down\n";
   }
}

Который для ваших образцов данных будет печатать:

port-channelxyc provdb002 is shut down
port-channel200  is shut down
Другие вопросы по тегам