我需要查找所有访问过的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命令?
答案 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