grep命令仅匹配访问日志的请求URL

时间:2014-04-22 10:15:44

标签: grep

我需要查找所有访问过的URL,这些URL包含config,tmp,backup或dump等关键字。

grep '/config/\|/tmp/\|/backup/\|/dump/' access.log

当我访问日志时,我收到了不需要的日志,如下所示

  

106.221.160.250 - - [11 / Apr / 2014:12:07:13 -0400]"获取url.com/perfect HTTP / 1.1" 200 43" file:///something/tmp/579928.html" " HTC_Smart_F3188 Mozilla / 5.0(如Gecko)Obigo / Q7" 0 20675

它不需要GET url.com/perfect HTTP/1.1" 200 43 "file:///something/tmp/579928.html,但不包含所需的关键字。

我应该如何更改我的grep命令?

2 个答案:

答案 0 :(得分:0)

试试这个:

grep'tmp \ | config \ | backup \ | dump'accessl.log

答案 1 :(得分:0)

您的输入数据 包含您正在寻找的关键字之一。注意:

grep '/config/\|/tmp/\|/backup/\|/dump/' access.log
                ^^^^^

"file:///something/tmp/579928.html"
                  ^^^^^

但有人仍然可以把#34; / dump /"如果他们想要弄乱你的用户代理字符串。如果您真正想要的是匹配GET路径的第一部分,那么您可以准确地查找,而不是匹配整行中的关键字。例如:

egrep 'GET /(config|tmp|backup|dump)/' access.log

阅读起来也更简单。我使用egrep以便我们可以使用ERE而不是BRE来避免丑陋的反斜杠。请注意,如果有人用虚假数据加载了他们的用户代理,这仍然可以捕获误报,因此您可以使用awk更直接地解析日志文件来控制字段位置:

awk '$6~/GET/ && $7 ~ /^\/(config|tmp|backup|dump)\//' access.log