'tail' 和 'grep' 的简单使用。多个条件

'tail' 和 'grep' 的简单使用。多个条件

我正在尝试读取由简单守护进程写入的日志文件。我想将“实时”输出过滤为某些(多个)“类型”。

我的类型是:DEBUG|INFO|WARN|ERROR|FATAL

这是我目前所拥有的,它适用于一种情况,但我无法让它适用于多种情况。

tail -f log.txt | grep INFO

我尝试了几种方法,试图表达我想要的“ WARN's & ERROR's”,但都不起作用。我该如何纠正这个问题?

答案1

尝试:

tail -f log.txt | egrep 'WARN|ERROR'

答案2

除了切换到egrep/grep -E以获取扩展正则表达式的交替运算符之外,您还可以使用多个-e参数来获取正则grep或甚至fgrep/grep -F

事实上,如果您的搜索都是静态字符串(如原始问题),您甚至可以一直“降级”到fgrep/ grep -F,这可能会提高速度(因为它总是进行直接字符串比较而不需要正则表达式)。

fgrep -e DEBUG -e INFO -e WARN -e ERROR -e FATAL

POSIX 还允许用换行符分隔模式。

# bash-ish to put a newlines into the string
fgrep $'DEBUG\nINFO\nWARN\nERROR\nFATAL'

# Standard syntax, but easier to break while editing(?):
fgrep "$(for f in DEBUG INFO WARN ERROR FATAL; do echo "$f"; done)"

答案3

这也有效(常规grep并转义管道字符):

tail -f log.txt | grep 'WARN\|ERROR'

相关内容