Personellement, j'aurais fait du
sed -n '/^Received:/s/^.*\[\([0-9]\?[0-9]\?[0-9]\.[0-9]\?[0-9]\?[0-9]\.[0-9]\?[0-9]\?[0-9]\)\.[0-9]\?[0-9]\?[0-9]\].*$/\1/p' mailbox0* |sort -n -t .
Le /^Received:/ permet de ne considérer que les lignes qui commencent par Received:
Sinon, pour le tri tel que tu le veux, je ne pense pas que sort soit capable de le faire.
Par contre, tu peux utiliser awk pour afficher le nombre en hexadécimal, en mettant en 2e colonne l'adresse IP normale, utiliser sort pour ordonner les lignes, puis re-awk pour ne garder que la 2e colonne :
...| awk -F '.' '{printf "%02x%02x%02x%02x ", $1,$2,$3,$4; print $_}' | sort -n | awk '{print $2}
À noter qu'on peut directement utiliser awk pour filtrer le tout :
cat /var/mail/boite* | awk -F '[][]' '/^Received:/{split($2,a,"."); printf "%02x%02x%02x%02x ",a[1], a[2], a[3], a[4]; print a[1]"."a[2]"."a[3]"."a[4]}' | sort -n | awk '{print $2}'
Voilà, pour le filtrage, gerp -v me semble pas si mal...
Sinon tu peux mettre dans le awk un if :
awk -F '[][]' '/^Received:/{if ($2!="127.0.0.1"){split($2,a,"."); printf "%02x%02x%02x%02x ",a[1], a[2], a[3], a[4]; print a[1]"."a[2]"."a[3]"."a[4]}}'