获取IP地址的日志

Pau*_*len 6 grep

我很擅长使用"基本的"?unix命令和这个问题让我的知识更加值得考验.我想做的是从日志中grep所有IP地址(例如来自apache的access.log)并计算它们发生的频率.我可以使用一个命令执行此操作,还是需要为此编写脚本?

fal*_*tro 14

你至少需要一条短管道.

sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' -e t -e d access.log | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

这将打印每个IP(虽然只能用于ipv4),前缀为计数.

我用apache2的access.log测试了它(虽然它是可配置的,所以你需要检查),它对我有用.它假设IP地址是每一行的第一件事.

sed收集IP地址(实际上它查找4组数字,其间有句点),并用它替换整行.-e t如果它设法进行替换,则继续到下一行,-e d删除该行(如果没有IP地址).sort排序.. :)并uniq -c计算连续相同行的实例(由于我们已对它们进行排序,因此对应于总计数).


Dav*_*han 5

这里提供的答案都不适合我,所以这是一个有效的答案:

cat yourlogs.txt | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort | uniq -c | sort
Run Code Online (Sandbox Code Playgroud)

它使用 grep 来隔离所有 ip。然后对它们进行排序,对它们进行计数,然后再次对结果进行排序。