查看不含特定字符串的文件

查看不含特定字符串的文件

tail正在搜索类似或的程序less,它允许我查看不包含特定字符串的行的日志。例如,查看不包含 UFW ( [UFW BLOCK]) 输入行的 syslog。

答案1

模式匹配反转选项-v对此grep确实很有帮助:

grep -v 'UFW BLOCK' /var/log/syslog

这将显示所有不包含 的行UFW BLOCKgrep默认情况下,由于使用基本正则表达式,因此包含括号将使其搜索“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

相关内容