我正在寻找一些脚本的帮助,该脚本可以遍历数组的行,将它们打印到屏幕上并在脚本检测到特定字符时停止,在这种情况下为!
标记。我尝试过使用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;
任何帮助将不胜感激:)
答案 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 $_
}