因此,我有一堆使用标准日志格式的Apache日志。我想获取并非来自网络搜寻器的所有日志行。
所以可以说我有一个文件robot_patterns,其条目如下
Googlebot
msnbot-media
YandexBot
bingbot
如果运行命令,grep -f robot_patterns *.log
我将通过与上述模式匹配的机器人获得所有条目。我的实际列表中有约30个我希望忽略的漫游器和代理条目。
但是我想找到所有不是来自bot的条目。因此,我尝试grep -v -f robot_patterns *.log
了grep没有返回任何结果。这不是我期望或想要的,并且我没有找到一种明显的方式来获得我想要的东西。将-v
选项与文件中的多个模式组合使用时,grep仅在匹配每个模式时才返回匹配行。
当我在系统上尝试此操作时,grep -v -f具有所需的行为,仅返回不匹配任何模式的行。这是(GNU grep)2.14.56-1e3d。您正在使用什么grep?
—
wingedsubmariner 2013年
我在跑步
—
Zoredache
GNU grep 2.6.3
。
我进行了更多测试,发现如果patterns文件中有一个空行,它将与每一行匹配,从而导致-v不返回任何行。但是,这不是-F的问题,并且-F可能会加快grep的执行速度-可能值得您尝试一下。
—
wingedsubmariner 2013年
空行尾!嗯...这似乎是问题所在。如果需要,应将其添加为答案。
—
Zoredache