我正在尝试读取由简单守护进程写入的日志文件。我想将“实时”输出过滤为某些(多个)“类型”。
我的类型是: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'