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
工具对输出进行后处理grep
,sed
例如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}'