从数组中获取行并停止在特定字符处

时间:2013-07-18 09:41:18

标签: perl

我正在寻找一些脚本的帮助,该脚本可以遍历数组的行,将它们打印到屏幕上并在脚本检测到特定字符时停止,在这种情况下为!标记。我尝试过使用foreach声明,但没有取得任何成功......

数组(@lines)内容的示例是:

ip vrf test
rd 2856:10000331
export map SetAltMgmtRT
route-target export 2856:10000331
route-target import 2856:10000331
maximum routes 1000 75
!

我到目前为止的脚本是:

elsif ( $action eq "show_vrf" ) {
            my $cmd = "show run | begin <VRF_NAME>";
            $cmd = $cmd . " | i $include" if($include) ;
            my @lines = $s->cmd(String => $cmd,
                            Prompt  => "/$enableprompt/",
                            Timeout => 10);
            foreach $lines (@lines) {
                    <statement, this is where I am stuck>
            }
            print $lines;

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:4)

停止的标准是什么?有感叹号还是只有一个感叹号?或者只是以感叹号开头的一行?

您还需要解决一些名为lines的问题。

my $output;
foreach my $line (@lines) {
    last if $line =~ m/^!/; # leave loop if line starts with an exclamation mark
    $output .= $line;
}
print $output;

对于下面评论中的其他要求(数据有多个感叹号),您需要这样的内容:

use Data::Dumper;
my @output; # assign output chunks into an array
my $i = 0;
foreach my $line (@lines) {
    if ($line =~ m/^!/) {
        $i++;
        next;
    }
    $output[$i] .= $line;
}
print Dumper(\@output);

答案 1 :(得分:2)

如果行匹配,

中断!

last if ($line =~ /!/);

答案 2 :(得分:1)

for(@lines){
last if(/\!$/);# this will be true if there is an Exclamation mark at the end of line
print $_
}