如何检查文件中的IP地址有效性?

时间:2019-06-11 08:48:32

标签: file perl

我在一个文本文件中有一个信息报告,我想将它们导出为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格式?

2 个答案:

答案 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];