我有一个文件,当我使用时file myFile
我会返回myFile: ASCII text, with very long lines
然后我将其作为 .txt 文件打开,它在记事本中打开时会显示很多 IP 地址。例如,127.0.0.1 - - [20/Feb/2014:19:35:31 -0700] "GET /favicon.ico HTTP/1.1" 404 6008 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:27.0) Gecko/20100101 Firefox/27.0"
各行等等。
有没有办法搜索此 ASCII 文本以查找唯一的 IP 地址以及哪个地址具有最多的“命中率”?我很难找到这种类型的命令,因为我甚至不确定是否应该在 .txt 文件中打开它。
答案1
您可以使用grep
提取 IP 地址,并使用sort
+uniq
计算命中次数:
grep -Po '^\d+(\.\d+){3}' filename | sort | uniq -c
grep
用于搜索与正则表达式匹配的文本-o
仅打印与表达式匹配的文本,而不是整行-P
启用 Perl 风格的正则表达式^\d+(\.\d+){3}
- 匹配的字符串:- 行首 (
^
) 后跟 - 任意数量的数字 (
\d+
) 后跟 - 一个点和任意数量的数字 (
\.\d+
) 重复 3 次 ({3}
)
- 行首 (
sort
对输入进行排序uniq -c
打印排序输入中唯一条目的数量。