在tail -f 中,如何过滤掉具有特定关键字的内容?

Ale*_*lex 39 linux unix grep logging tail

我想要tail -f我的日志。但是,我想过滤掉所有包含以下单词的内容:

“ELB”、“Pingdom”、“健康”

DTe*_*est 58

我不知道如何使用 awk 而不是 grep,但这对我有用:

tail -f file.log | grep -Ev '(ELB|Pingdom|Health)'
Run Code Online (Sandbox Code Playgroud)

编辑:正如dmouratiCaleb 所 指出的,为了方便起见,您也可以使用egrep代替grep -E。在某些系统上,这将是指向同一个二进制文件的链接,在其他系统中,它是由 grep 包提供的副本。无论哪种方式,它都可以作为-E开关的替代品。但是,根据 GNU grep 手册页:

[...],两篇不同的方案egrepfgrep服务。egrep与 相同grep -Efgrep与 相同grep -F。直接调用作为egrepfgrep已被弃用,但提供以允许依赖它们的历史应用程序未经修改地运行。

由于它们是同义命令,因此除非您根本没有 egrep,否则它归结为偏好。然而,为了向前兼容,建议使用grep -E语法,因为另一种方法已被正式弃用。


Cal*_*leb 21

尝试使用管道分隔的要过滤掉的单词列表将其传递给 egrep:

tail -f log_file | egrep -v 'ELB|Pingdom|Health'
Run Code Online (Sandbox Code Playgroud)

请注意,在匹配列表周围使用括号是可选的。由于|grep 将 视为逻辑 OR 运算符,无论它是否作为子组的一部分出现。'(ELB|Pingdom|Health)'功能完全一样。对于某些人来说,语法可能更明显;我发现没有输入更容易,因为我可以从单个匹配项切换到可能匹配项的列表,而无需返回添加括号。

值得一提的是multitail,ninja foo 在过滤输出时确实如此。例如,您可以像这样过滤您的单词:

multitail -e ELB -e Pingdom -e Health -f log_file
Run Code Online (Sandbox Code Playgroud)

您还可以使用它对输出进行着色或以其他方式突出显示,而不仅仅是对其进行过滤。

编辑:请参阅DTests 答案和评论,以了解 egrep 如何只是一种已弃用的替代方式来触发grep -E.

  • 表达式不应该以 (') 结尾,而不是以 (") 结尾吗? (2认同)

dmo*_*ati 5

tail -f /path/to/log | egrep -v 'ELB|Pingdom|Health'
Run Code Online (Sandbox Code Playgroud)