如何使用 grep 过滤多个日志中的唯一错误?

如何使用 grep 过滤多个日志中的唯一错误?

我尝试在 Ubuntu 上使用以下模式:

grep -Eri "warning|error|critical|severe|fatal" --color=auto

在 /var/log 及其子文件夹中递归地查找许多不同 .log 文件中的相关错误。

我遇到的问题是,这会导致在运行表达式时打印数万行匹配项。我想至少通过以下方式之一来过滤这些内容:

  1. 打印但如果超过例如则跳过匹配。存在 3 个相同的匹配项
  2. 仅显示唯一匹配项(即打印找到的每一行之一)

我可以通过将输出管道传输到某个东西来做到这一点吗?目前,检查每个日志中的错误非常耗时,这就是我尝试这样做的原因。但是我使用的表达式打印了太多信息,以至于它本身也无法使用。我尝试过将管道设置为“less”,但这会删除突出显示,这使得阅读变得更加困难,并且无法解决输出太大的问题。

我意识到我也可以一次将表达式限制为特定文件,但正如我提到的,有些日志充满了匹配项,而其他日志则很少。因此,进一步过滤掉重复项将非常有帮助。

以下是我正在搜索的众多日志之一中的错误行示例:

./artifactory/artifactory-service.log:20:2021-07-20T08:45:30.248Z [jfrt ] [ERROR] [.j.a.c.g.GrpcStreamObserver:97] [c-default-executor-1] - refreshing affected platform config stream - got an error

如果有数百个这样的错误,我想显示例如。在进入下一场比赛之前最多 3 个。

或者,由于日期在日志中的列出方式。过滤以仅匹配特定日期会很棒,我将如何去做呢?日期过滤会极大地限制输出。

相关内容