У вас уже есть подходящий ответ об использовании grep для извлечения IP-адресов, но только для объяснения того, почему вы видите, что несоответствия печатаются:
perldoc perlrun
расскажет вам обо всех параметрах, которые вы можете передать Perl в командной строке.
Цитата из него:
-p causes Perl to assume the following loop around your program, which makes it
iterate over filename arguments somewhat like sed:
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
Вместо этого вы могли бы использовать переключатель -n
, который работает аналогично, но не печатает автоматически, например:
cat foo.txt | perl -ne '/((?:\d{1,3}\.){3}\d{1,3})/ and print $1'
Кроме того, нет необходимости использовать cat
; Perl откроет и прочитает имена файлов, которые вы ему дадите, так что вы можете сказать, например ::
perl -ne '/((?:\d{1,3}\.){3}\d{1,3})/ and print $1' foo.txt