Сопоставление IP-адресов с помощью регулярных выражений может оказаться непростым делом - ваши сопоставляют множество вещей, которые не являются действительными адресами IPv4, например 100000.55
.
Есть модуль perl
, Regexp :: Common , который предоставляет проверенные регулярные выражения для сопоставления всевозможных вещей, включая адреса IPv4 и IPv6. Если вы установите его (пакет Ubuntu libregexp-common-perl
), вы можете заменить sed
часть этого конвейера на
perl -MRegexp::Common=net -lne '/^($RE{net}{IPv4}|$RE{net}{IPv6}).*"(.*)"$/ && print "$1 $2"'
, чтобы сопоставить оба семейства адресов.