#!/usr/bin/perl use strict; use warnings; use Regexp::Common qw(net); use String::Util qw(trim); while (<>) { /$RE{net}{IPv4}{-keep}/ and printf "%s\n", trim($1); /$RE{net}{IPv6}{-sep => ':'}{-style => 'HeX'}{-keep}/ and printf "%s\n", trim($1); /$RE{net}{MAC}{-keep}/ and printf "%s\n", trim($1); } #### cat report.txt | ./ips.pl > ips.txt #### 192.168.1.188 fdba:7b43:1916::d34 fe80::ec78:4ff:fec0:a17b 192.168.1.1 fe80::eade:27ff:feb6:fa8c 192.168.1.1 fdba:7b43:1916::1 fdba:7b43:1916::d34 fdba:7b43:1916::d34 fdba:7b43:1916::d34 fdba:7b43:1916::d34 fdba:7b43:1916::d34 #### cat perlout.txt | sort | uniq 192.168.1.1 192.168.1.188 fdba:7b43:1916::1 fdba:7b43:1916::d34 fe80::eade:27ff:feb6:fa8c fe80::ec78:4ff:fec0:a17b cat perlout.txt | sort | uniq -u 192.168.1.188 fdba:7b43:1916::1 fe80::eade:27ff:feb6:fa8c fe80::ec78:4ff:fec0:a17b When pre-filter one more time with uniq, then they give same result cat perlout.txt | sort | uniq | uniq 192.168.1.1 192.168.1.188 fdba:7b43:1916::1 fdba:7b43:1916::d34 fe80::eade:27ff:feb6:fa8c fe80::ec78:4ff:fec0:a17b cat perlout.txt | sort | uniq | uniq -u 192.168.1.1 192.168.1.188 fdba:7b43:1916::1 fdba:7b43:1916::d34 fe80::eade:27ff:feb6:fa8c fe80::ec78:4ff:fec0:a17b