从access.log中获取前50个IP,包括IPV6



我经常用它来按IP地址检查网站访问日志。问题是它只包括IPV4而不包括IPV6。

知道我可以使用什么regex来包含(或运行一个单独的(IPV6命令吗?

cat access.log | sed -e 's/^([[:digit:].]*).*"(.*)"$/1 2/' | sort -n | uniq -c | sort -nr | head -50

通过正则表达式匹配IP地址可能很棘手——您的IP地址匹配了许多无效的IPv4地址,例如100000.55

有一个perl模块Regexp::Common,它提供了经过良好测试的正则表达式,用于匹配各种内容,包括IPv4和IPv6地址。如果你安装了它(Ubuntu软件包是libregexp-common-perl(,你可以用替换该管道的sed部分

perl -MRegexp::Common=net -lne '/^($RE{net}{IPv4}|$RE{net}{IPv6}).*"(.*)"$/ && print "$1 $2"'

以匹配两个地址族。

最新更新