Perl打印更多行

时间:2017-12-12 08:08:22

标签: regex perl multiline

我是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 个答案:

答案 0 :(得分:3)

好的,您的数据看起来像是空行分隔的。

很方便,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