Как проверить правильность IP-адреса в файле? - PullRequest
1 голос
/ 11 июня 2019

У меня есть информационный отчет в текстовом файле, и я хочу экспортировать его в формат 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 ]

7 голосов
/ 11 июня 2019

Regexp :: Common содержит необходимое регулярное выражение:

use Regexp::Common qw( net );

# ...
my @columns = split ' ';
next unless $columns[0] =~ /$RE{net}{IPv4}/;
say {$fo} join ',', @columns;
2 голосов
/ 11 июня 2019

Data :: Validate :: IP также может решить эту конкретную задачу.

use strict;
use warnings;
use Data::Validate::IP 'is_ipv4';

...

next unless is_ipv4 $columns[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...