我在一个文本文件中有一个信息报告,我想将它们导出为CSV格式,并且仅导出为IPv4格式的那些行(第一列)。我如何在Perl中做到这一点?
10.10.10.1 10.10.11.11 51251 445 2019-03-05 11:59:29.008 29.156 ......
10.10.10.2 10.10.11.22 51234 123 2019-03-05 11:40:29.008 30.156 .A..SF
2001:288:8900:c400:2018:8ce:1ca8:9cb0 2404:6800:4012:1::200e 62105 443 2019-03-04 23:59:32.458 0.340 17 ...... 0 8 4763 1
2001:288:8001:c200:3171:3abcd:28af:7e8f 2404:6800:4008:c04::bc 50286 443 2019-03-04 23:59:32.471 0.000 6 .A.... 0 1 61 1
我只想获取如下IPv4格式的行,
10.10.10.1 10.10.11.11 51251 445 2019-03-05 11:59:29.008 29.156 ......
10.10.10.2 10.10.11.22 51234 123 2019-03-05 11:40:29.008 30.156 .A..SF
我的代码,
open my $fh, '<', 'in.txt';
open my $fo, '>', 'out.csv';
while (<$fh>) {
next if ($. == 1);
s/^\s+//;
my $text = (join ',', (split /\s+/, $_))."\n";
print $fo $text;
}
如何测试第一列是否为IPv4格式?
答案 0 :(得分:7)
Regexp::Common包含您需要的正则表达式:
factor1
答案 1 :(得分:2)
Data::Validate::IP也可以解决此特定任务。
use strict;
use warnings;
use Data::Validate::IP 'is_ipv4';
...
next unless is_ipv4 $columns[0];