我遇到了针对我们从Cisco交换机获得的一些文本文件运行Perl脚本的问题。看来,根据我们用来从交换机获取信息的方法,文件具有不同的格式,可以正确解析或被Perl脚本忽略。
我不确定如何在问题上显示格式
此格式被忽略:
Load for five secs: 32%/0%; one minute: 14%; five minutes: 13%
Time source is NTP, 11:32:05.154 BST Tue Mar 27 2018
Fa0/1 1059225247 10607505 308 4511
Fa0/13 266860396 1052489 79896 6
Gi0/1 173770642844 20858446 958514311 452445559
Gi0/2 161741166272 11443033 1056101155 429442472
Po6 335511809116 32301479 2014615466 881888031
Fa0/1 1874849888 10258324 1643899 2235298
Fa0/13 1146650530 1515709 1754689 9028035
Gi0/1 1152699582 10607505 206750 4483
Gi0/2 818776784 3355128 206663 4690
Po6 1971476366 13962633 413413 9173
此格式正常
Load for five secs: 8%/0%; one minute: 13%; five minutes: 14%
Time source is NTP, .11:00:56.345 GMT Mon Feb 26 2018
Port InOctets InUcastPkts InMcastPkts InBcastPkts
Fa0/1 12479523313 18114137 73428 7
Fa0/2 0 0 0 0
Fa0/3 0 0 0 0
Fa0/4 133519690294 108839334 51277 0
Fa0/5 0 0 0 0
Fa0/6 53741520430 53710739 51253 0
Fa0/7 41441297607 48481526 51268 0
Fa0/8 135436414967 109360255 51179 0
Fa0/9 0 0 0 0
Fa0/10 15777946932 28964665 92027 7
Fa0/11 18242079587 37105281 92028 8
Fa0/12 6957880 94578 2 21
Fa0/13 14966233 195958 2 20
Fa0/14 6383951 87892 2 23
Fa0/15 99056361 626574 8 35
Fa0/16 534303664 1033306 8 36
Fa0/17 99952212 629958 8 36
Fa0/18 518959271 1027977 8 36
Fa0/19 399717840577 296105605 17969848 0
Fa0/20 0 0 0 0
Fa0/21 0 0 0 0
Fa0/22 796038075 4653515 14895 24243
Fa0/23 81876696 212575 92046 13
Fa0/24 0 0 0 0
Gi0/1 712152233997 245342838 1214298205 700443702
Gi0/2 41503317082 8378680 78384491 326407250
这是我使用的脚本;它完美适合我的需要。我将非工作文本粘贴到"工作文件中#34;这很有效,所以几乎就像文件没有被拿起一样。
#!/perl/bin/perl
use warnings;
my @files = <c:/perl64/SOUTH/*>;
foreach $file ( @files ) {
open(FILE, "$file");
while ( $line = <FILE> ) {
print "$file $line" if $line =~ /Fa/n;
print "$file $line" if $line =~ /Gi/n;
print "$file $line" if $line =~ /Te/n;
print "$file $line" if $line =~ /GE/n;
}
close FILE;
}
答案 0 :(得分:0)
问题是,默认情况下,Windows PowerShell会生成UTF-16LE输出,这意味着每个字符占用两个字节而不是一个
由于您没有对此进行解码,因此正则表达式不匹配,因此不会打印任何内容
查看Understanding default encoding and Change the same in PowerShell
如果将PowerShell输出的open(FILE, "$file")
更改为open(FILE, '<:encoding(UTF-16)', $file)
(原始引号是多余的),它应该会更好。请注意,您可能还需要删除初始BOM字符