Вам понадобится как минимум короткий конвейер.
sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' -e t -e d access.log | sort | uniq -c
, который будет печатать каждый IP (будет работать только с ipv4, хотя), отсортированный с префиксом count.это с apache2 access.log (хотя это настраивается, так что вам нужно будет проверить), и это сработало для меня.Предполагается, что IP-адрес является первым в каждой строке.
Sed собирает IP-адреса (на самом деле он ищет 4 набора цифр с точками между ними) и заменяет всю строку им.,-e t
переходит к следующей строке, если ей удалось выполнить замену, -e d
удаляет строку (если на ней не было IP-адреса).sort
сортирует .. :) И uniq -c
считает экземпляры последовательных идентичных строк (что, поскольку мы отсортировали их, соответствует общему количеству).