A menudo uso esto para verificar los registros de acceso al sitio web por dirección IP. El problema es que solo incluye IPV4 y no IPV6.
¿Alguna idea de qué expresión regular puedo usar para que incluya (o ejecute un comando separado) para IPV6?
cat access.log | sed -e 's/^\([[:digit:]\.]*\).*"\(.*\)"$/\1 \2/' | sort -n | uniq -c | sort -nr | head -50Hacer coincidir las direcciones IP a través de expresiones regulares puede ser complicado: la suya coincide con muchas cosas que no son direcciones IPv4 válidas, como 100000.55 , por ejemplo.
Hay un módulo de perl , Regexp::Common que proporciona expresiones regulares bien probadas para hacer coincidir todo tipo de cosas, incluidas las direcciones IPv4 e IPv6. Si lo instala (el paquete de Ubuntu es libregexp-common-perl ), puede reemplazar la parte sed de esa canalización con
perl -MRegexp::Common=net -lne '/^($RE{net}{IPv4}|$RE{net}{IPv6}).*"(.*)"$/ && print "$1 $2"'para hacer coincidir ambas familias de direcciones.