我尝试按功能过滤日志文件例如:
195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&xxxx...
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer&xxxx...
197.xx.x.x - - [13/Apr/2017:09:10:xx +0200] "POST /userx/index.php?m=meeting&xxxx...
197.xx.x.x - - [13/Apr/2017:09:20:xx +0200] "POST /userx/index.php?m=dashboard&xxxx...
在这种情况下,我的功能是联系人、客户、会议、仪表板,我尝试忽略默认的欢迎页面。我用了
awk '$7 !~ /m=dashboard/ ' log file
我的问题是我是否可以忽略文件中的更多功能?
cat file:
dashboard
meeting
为了只有这一行:
195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer
答案1
sed '/\//!{H;d};G;/m=\(.*\)\n.*\1/d;P;d' file log
说明:首先读取file
过滤器关键字,然后读取日志文件。包含 no 的行/
被解释为关键字并附加到保留空间 ( H
)。其他行将附加保留空间 ( G
),并且如果 后面的关键字m=
在关键字列表 ( /m=\(.*\)\n.*\1/d
) 中重复,则将被删除。如果没有,则打印时不带附加保留空格 ( P
)。
答案2
由于你的问题现在似乎更有意义,我认为你正在寻找这样的东西:
awk -F= 'NR==FNR{l[$NF]=1; next} { if (!l[$NF]) print;}' ignore_words your_log_file
编辑
正如 Sundeep 在上面的评论中指出的,您可以使用 grep,如下所示:
grep -Fvf ignore_words log_file
要了解选项的-Fvf
用途,请参阅man grep
页面。