perl脚本如何实现从多行中抽取所需要的多行
请达人帮忙perl实现关于防火墙日志configuserlocal后第一个到结尾end的多行匹配,并抽取出来到一个数组中,将结果输出。我所需的内容其实就是这些,这些内容来...
请达人帮忙perl实现关于防火墙日志config user local后第一个到结尾end的多行匹配,并抽取出来到一个数组中,将结果输出。我所需的内容其实就是这些,这些内容来源于我上传的附件。请参看我的附件内容。
config user local
edit "guest"
set status enable
set two-factor disable
set type password
set passwd ENC NSKXMrL+Vklz7+RLcEZrG6YcU8VYKBg7K/SgmsO9oqzOaZEQpCe0Wn/2H+6QQIp9cAPL0txvTXVnB2EhA8Xr/hA/f6q6hg+8hE9d8yt16Q1sknr4
next
edit "user1"
set status enable
set two-factor disable
set type password
set passwd ENC pyWSJX9BEIhcer+3dLF0RFx0c0nazg+Qm/s1nLUUn6mJ0YWLvl0BlpR9PCZrKvItOIMFIrqSSay29P3TzqyVhIKv4Gwpgr20QLptFnBBv40+x15q
next
end
附件内容:http://hzsrc.ctfs.ftn.qq.com/ftn_handler/5966620a6a92a961bb7f6ea20adfb03346e1666b3c8f64c489627221243f23b7dba22eb984918f3b9ed81b3ceecbc81448a2e6295fbcfa5bd9c19b048348f62e/?fname=result.txt&k=5e3039660f0dd7c60401884747300b16040409035600090e4c020d03551d0d0d5209140705565f14570308555702085b59025b52613a394b04434c0a151e4d41153004&fr=00&&txf_fid=00000000acac129e78924734920faa3523df520c&xffz=1163922 展开
config user local
edit "guest"
set status enable
set two-factor disable
set type password
set passwd ENC NSKXMrL+Vklz7+RLcEZrG6YcU8VYKBg7K/SgmsO9oqzOaZEQpCe0Wn/2H+6QQIp9cAPL0txvTXVnB2EhA8Xr/hA/f6q6hg+8hE9d8yt16Q1sknr4
next
edit "user1"
set status enable
set two-factor disable
set type password
set passwd ENC pyWSJX9BEIhcer+3dLF0RFx0c0nazg+Qm/s1nLUUn6mJ0YWLvl0BlpR9PCZrKvItOIMFIrqSSay29P3TzqyVhIKv4Gwpgr20QLptFnBBv40+x15q
next
end
附件内容:http://hzsrc.ctfs.ftn.qq.com/ftn_handler/5966620a6a92a961bb7f6ea20adfb03346e1666b3c8f64c489627221243f23b7dba22eb984918f3b9ed81b3ceecbc81448a2e6295fbcfa5bd9c19b048348f62e/?fname=result.txt&k=5e3039660f0dd7c60401884747300b16040409035600090e4c020d03551d0d0d5209140705565f14570308555702085b59025b52613a394b04434c0a151e4d41153004&fr=00&&txf_fid=00000000acac129e78924734920faa3523df520c&xffz=1163922 展开
展开全部
open SOURCE,"<result.txt";
open DESTINATION,">output.txt";
my $startflag = 0; #初始化起始标志startflag
while(<SOURCE>)
{
if(/^\s*config user local\s*$/) #找到起始点,第一个config user local, 设置起始标志startflag
{
$startflag = 1;
print DESTINATION $_;
}elsif(/^\s*end\s*$/ and $startflag == 1) #找到终止点,config user local之后的第一个end, 重置起始标志并退出循环, 此处不重置也ok.
{
$startflag = 0;
print DESTINATION $_;
last;
}else #把起始点到中止点中间的各行输出到output.txt
{
print DESTINATION $_ if $startflag == 1;
}
}
代码我用你的附件测试过, 如果你的要求描述完整了,那么这个就是可行的.
如果你一定要把输出放入数组的话, 在此代码上稍作调整就行了, 有问题再问我.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询