所以我有一堆使用标准日志格式的 Apache 日志。我想获取所有不是来自网络爬虫的日志行。
所以可以说我有一个文件robot_patterns,其中包含以下条目
Googlebot
msnbot-media
YandexBot
bingbot
Run Code Online (Sandbox Code Playgroud)
如果我运行该命令,grep -f robot_patterns *.log
我将通过与上述模式匹配的机器人获取所有条目。我的实际列表有大约 30 个我希望忽略的机器人和代理条目。
但我想找到所有不是来自 bots的条目。所以我尝试grep -v -f robot_patterns *.log
,grep 没有返回任何结果。这不是我所期望或想要的,我也没有找到一种明显的方法来获得我想要的东西。当使用该-v
选项与文件中的多个模式结合使用时,grep 仅在匹配每个模式时才返回匹配行。
Ors*_*ius 17
你可以试试:
grep -vE 'Googlebot|msnbot-media|YandexBot|bingbot' yourlogfile
Run Code Online (Sandbox Code Playgroud)
win*_*ner 10
如果模式文件中有一个空行,它将匹配每一行,导致没有行返回-v
. 这是因为这些行被解释为正则表达式,而空的正则表达式将始终匹配。
-F
然而,这不是问题,因为grep
忽略带有-F
.
-F
导致grep
将这些行解释为要搜索的简单字符串,grep
如果不需要正则表达式,可能会加快速度。