tail
正在搜索类似或的程序less
,它允许我查看不包含特定字符串的行的日志。例如,查看不包含 UFW ( [UFW BLOCK]
) 输入行的 syslog。
答案1
模式匹配反转选项-v
对此grep
确实很有帮助:
grep -v 'UFW BLOCK' /var/log/syslog
这将显示所有不包含 的行UFW BLOCK
。grep
默认情况下,由于使用基本正则表达式,因此包含括号将使其搜索“UFW BLOCK”的任何单个字符,包括空格。您可能最终不会得到任何输出。如果您需要确保字符串周围有括号,请将其转义\[UFW BLOCK\]
,或使用-F
选项grep
仅包含固定字符串(感谢扎娜和钢铁司机有关这方面的建议):
grep -Fv '[UFW BLOCK]' /var/log/syslog
您可以通过将输出传送到分页器来使其更容易查看,例如less
:
grep -v 'UFW BLOCK' /var/log/syslog | less
或者将输出重定向到主目录中的文件以供稍后查看:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
答案2
使用less
命令的&
选项可以过滤掉仅显示所需的匹配模式,如下所示,
& /PATTERN/
在您的情况下,如果您希望过滤行UFW BLOCK
不显示在输出中,您可以简单地使用&!
如下方法:
&! /UFW BLOCK/
答案3
您还可以使用sed
命令d
从流中删除具有模式的行:
sed '/\[UFW BLOCK\]/d' /var/log/syslog
我们转义,[]
因为它们通常表示字符类,意思是“匹配这里的任何东西”
答案4
您awk
也可以使用:
awk '!/PATTERN/' log
当我有多个“模式”并且不想使用两个时,我会使用它,grep
例如:
... | grep -v foo | grep -v bar
其语法为:
awk '!/PATTERN/ && !/PATTERN2/' log