Печать двух совпадений в одной строке проще с awk
, после чего будет напечатана дата (при печати $1,$2,$3
и всех действительных IP-адресов .
gawk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/,a);split(a[0],b,".")} b[1]<=255&& b[2]<=255 && b[3]<=255 && b[4]<=255 &&length(a[0]){print $1,$2,$3, a[0]}' log_file
May 25 05:34:16 192.0.2.2
May 25 05:34:16 192.0.2.1
Объяснение: Сначала используйте функцию соответствия, чтобы захватить все строки, имеющие формат digit.digit.digit.digit
, и сохранить их в массив с именем "a
", а затем разделить захваченный массив (a
) на точку (* 1013).*) и проверьте, является ли каждый из них <=
255. Убедитесь, что IP-адрес действителен.
Обратите внимание: здесь используется GNU awk.
Также обратите внимание, что, упомянутое регулярное выражение будет также печатать недействительные IP-адреса (например: 333.222.555.666
).