在数组中有一些输出,我试图从输出以特定单词开始的位置拉出细节,并以特定的单词/字符结束。然后将此输出打印到屏幕上。
我正在使用的数组中的输出是:
router rip
version 2
redistribute bgp 45134 metric 3
passive-interface Serial1/3:1.333
passive-interface Serial3/1:3.333
passive-interface Serial3/1:5.333
passive-interface Serial3/2:1.333
passive-interface Serial3/4:1.333
passive-interface Serial3/4:17.333
passive-interface Serial6/1:1.333
no auto-summary
!
address-family ipv4 vrf TestVRF-0001
redistribute bgp 45134 metric 3
network 10.0.0.0
no auto-summary
version 2
exit-address-family
!
到目前为止我生成的perl代码如下:
elsif ( $action eq "show_vrf1" ) {
my $cmd = "show run | begin router rip";
my @lines = $s->cmd(String => $cmd,
Prompt => "/$enableprompt/",
Timeout => 10);
foreach my $line (@lines) {
if(/address-family ipv4 vrf TestVRF-0001.*?!/){
$result=$1;
print $result;
}
}
}
我只想将数据中的以下内容拉出来:
address-family ipv4 vrf TestVRF-0001
redistribute bgp 45134 metric 3
network 10.0.0.0
no auto-summary
version 2
exit-address-family
!
由于某种原因,当我运行脚本时,我只是得到一个空白屏幕,没有从数组中提取数据。
答案 0 :(得分:1)
if($line =~ /address-family ipv4 vrf TestVRF-0001.*?!/){
而不是
if(/address-family ipv4 vrf TestVRF-0001.*?!/){
答案 1 :(得分:0)
您将$ line与正则表达式匹配。您期望的输出不在一行上,因此没有行可以匹配它。
您可以将整个多行字符串存储在标量中:
my $output = join q(), $s->cmd(...);
然后,如果使用括号来真正捕获字符串的一部分,则可以检索输出:
if ($output =~ /(address-family ipv4 vrf TestVRF-0001.*?!)/s) {
my $result = $1;
请注意,需要使用/s
修饰符才能使点匹配换行符,但它通常不会。\ / p>