1

以下の出力から、すべての IP アドレスを格納できる 1 つのアレイを作成したいだけです。

IP の例: 57.35.47.54

出力:

Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
  'L' - labeled output interface, 'B' - unlabeled output interface,
  'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
  'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
  'P' - no rx intf label prot, 'p' - premature termination of LSP,
  'R' - transit router, 'I' - unknown upstream index,
  'X' - unknown return code, 'x' - return code 0

Type escape sequence to abort.

  0 57.35.47.54 MRU 4470 [Labels: implicit-null/1852 Exp: 0/0]
I 1 57.35.47.53 MRU 4470 [Labels: 16176 Exp: 0] 328 ms
L 2 57.35.57.1 MRU 4470 [Labels: explicit-null/2795 Exp: 0/0] 140 ms
D 3 57.35.7.105 MRU 4470 [Labels: 16228 Exp: 0] 364 ms
I 4 57.35.4.78 MRU 4470 [Labels: implicit-null/16304 Exp: 0/0] 196 ms
L 5 57.35.7.66 MRU 4470 [Labels: 16613 Exp: 0] 216 ms
L 6 57.35.4.38 MRU 4470 [Labels: implicit-null/implicit-null Exp: 0/0] 216 ms
! 7 57.35.4.122 288 ms
4

2 に答える 2

2

おそらく、以下が役立つでしょう:

use strict;
use warnings;
use Regexp::Common qw/net/;

my @IPs;

while (<DATA>) {
    push @IPs, $1 while /($RE{net}{IPv4})/g;
}

print "$_\n" for @IPs;

__DATA__
Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
'L' - labeled output interface, 'B' - unlabeled output interface,
'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
'P' - no rx intf label prot, 'p' - premature termination of LSP,
'R' - transit router, 'I' - unknown upstream index,
'X' - unknown return code, 'x' - return code 0
Type escape sequence to abort.
0 57.35.47.54 MRU 4470 [Labels: implicit-null/1852 Exp: 0/0]
I 1 57.35.47.53 MRU 4470 [Labels: 16176 Exp: 0] 328 ms
L 2 57.35.57.1 MRU 4470 [Labels: explicit-null/2795 Exp: 0/0] 140 ms
D 3 57.35.7.105 MRU 4470 [Labels: 16228 Exp: 0] 364 ms
I 4 57.35.4.78 MRU 4470 [Labels: implicit-null/16304 Exp: 0/0] 196 ms
L 5 57.35.7.66 MRU 4470 [Labels: 16613 Exp: 0] 216 ms
L 6 57.35.4.38 MRU 4470 [Labels: implicit-null/implicit-null Exp: 0/0] 216 ms
! 7 57.35.4.122 288 ms

出力:

57.35.47.54
57.35.47.53
57.35.57.1
57.35.7.105
57.35.4.78
57.35.7.66
57.35.4.38
57.35.4.122

Regexp::Commonには、IPv4 アドレスに一致する正規表現が含まれており、各行でそれらをキャプチャするために上で使用されています。データには 1 行に 1 つの IP アドレスしか含まれていませんが、1 行に複数の IP も取得されます。キャプチャされた IP はpush編集され@IPs、最終的に出力されます。

于 2013-04-01T05:41:23.713 に答える
1

不足している regexp:common モジュールをインストールできない場合は、手動で解析できます

use strict;
use warnings;

while (<DATA>) {
    while(/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/g) {
        print "$1.$2.$3.$4\n" if ($1 < 256 && $2 < 256 && $3 < 256 && $4 <256);
    }
}

__DATA__
Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
'L' - labeled output interface, 'B' - unlabeled output interface,
'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
'P' - no rx intf label prot, 'p' - premature termination of LSP,
'R' - transit router, 'I' - unknown upstream index,
'X' - unknown return code, 'x' - return code 0
Type escape sequence to abort.
0 57.35.47.54 MRU 4470 [Labels: implicit-null/1852 Exp: 0/0]
I 1 57.35.47.53 MRU 4470 [Labels: 16176 Exp: 0] 328 ms
L 2 57.35.57.1 MRU 4470 [Labels: explicit-null/2795 Exp: 0/0] 140 ms
D 3 57.35.7.105 MRU 4470 [Labels: 16228 Exp: 0] 364 ms
I 4 57.35.4.78 MRU 4470 [Labels: implicit-null/16304 Exp: 0/0] 196 ms
L 5 57.35.7.66 MRU 4470 [Labels: 16613 Exp: 0] 216 ms
L 6 57.35.4.38 MRU 4470 [Labels: implicit-null/implicit-null Exp: 0/0] 216 ms
! 7 57.35.4.122 288 ms
于 2013-04-01T07:36:27.747 に答える