如何在多个文件中持续跟踪关键字并在每个报告行的开头包含文件名

如何在多个文件中持续跟踪关键字并在每个报告行的开头包含文件名
tail -f a/b/c.log d/e/f.log

像这样的日志:

==> a/b/c.log <==
xxx
yyy
Exception happened 1
zzz

==> d/e/f.log <==
rrr
Exception happened 2
sss

如何更改命令以便像这样拾取包含“Exception”的行:

a/b/c.log: Exception happened 1
d/e/f.log: Exception happened 2

该解决方案可以使用任何 Linux 命令。

答案1

如果你有multitail安装后,您可以使用它来-E 仅选择与某个正则表达式匹配的行,并--label在这些行前添加文件名,例如(-N 0根据您的需要进行调整):

multitail --follow-all -N 0 --mergeall -E 'Exception' \
--label 'a/b/c.log: ' a/b/c.log --label  'd/e/f.log: ' d/e/f.log

如果无权访问multitail,您可以仅使用每个文件并使用 ,等tail -f工具对输出进行后处理grepsed例如awk

tail -f a/b/c.log | sed '/Exception/!d;s|^|/a/b/c.log: |' &
tail -f d/e/f.log | sed '/Exception/!d;s|^|/d/e/f.log: |'

或者

tail -f a/b/c.log | awk '/Exception/{print "a/b/c.log: " $0}' &
tail -f d/e/f.log | awk '/Exception/{print "d/e/f.log: " $0}'

相关内容