我成功地解析思科配置文件,并抓住每一个标记之间配置的部分(Cisco使用符号!)使用的多行正则表达式:Perl的正则表达式多行匹配到散列
/(search string)/i .. /^!/
我的代码如下所示:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my (@results, @data) ;
#Test data to simulate a while loop on a file-handle running through a config file.
@data = (
"vlan 81" ,
" name Vlan 81 test1" ,
"!" ,
"vlan 82" ,
" name Vlan 82 test2" ,
"!" ,
"vlan 83" ,
" name Vlan 83 test3" ,
"!"
);
foreach (@data) {
if (/vlan/i .. /^!/) {
push (@results , $_) ;
}
}
print Dumper (@results) . "\n" ;
exit;
它的作品真的很好,但我要的结果推到一个哈希,用的代码是一个匿名的阵列中的每个部分,所以结果看起来是这样的:
%Vlan -> [Vlan 81, name Vlan 81 test1] , [Vlan 82, name Vlan 82 test2] , [Vlan 83, name Vlan 83 test3]
但我不能解决如何做到这一点,我的代码匹配搜索字符串和标记之间的每行,我最终将结果重建为另一个数组,逐行。
任何帮助,非常感谢。
干杯,
安迪
你的目标不是那么清楚,因为你的例子已经有一个默认的键'Vlan'一个条目。对于这个键你有一个数组列表。你是不是指每个键(例如Vlan 81)都有散列值? – Matteo 2012-03-29 11:26:22
是的,你说得对,谢谢你的评论,我会尽力在未来更加清晰。 – user1039417 2012-03-29 19:55:08