Vous aurez besoin d'un pipeline court au moins.
sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' -e t -e d access.log | sort | uniq -c
Qui va imprimer chaque adresse IP (ne fonctionnera qu'avec ipv4), trié en préfixe avec le nombre.
Je l'ai testé avec access.log d'apache2 (il est configurable cependant, donc vous devrez vérifier), et cela a fonctionné pour moi. Il suppose que l'adresse IP est la première chose sur chaque ligne.
Le sed recueille les adresses IP (en fait, il recherche 4 séries de chiffres, avec des périodes entre les deux), et remplace la ligne entière avec lui. -e t
continue à la ligne suivante s'il a réussi à effectuer une substitution, -e d
supprime la ligne (s'il n'y avait pas d'adresse IP dessus). sort
trie .. :) Et uniq -c
compte les instances de lignes identiques consécutives (ce qui, puisque nous les avons triées, correspond au nombre total).
Jetez un oeil à ma réponse à StackExchange unix: https://unix.stackexchange.com/a/389565/249079 – Ganapathy