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