Linux Bash下如何为tail -f输出的每行日志前置文件名
解决tail -f多日志文件时文件名前置并过滤的问题
直接使用tail配合awk即可实现需求,无需额外工具,命令如下:
tail -f *.log | awk '/^==> / {filename=substr($0,5,length($0)-8); next} !/(str1|str2)/ {print filename":"$0}'
命令解释:
tail -f *.log:持续跟踪当前目录下所有.log文件的新增内容- awk处理逻辑:
- 匹配
tail输出的文件名分隔行(格式为==> filename <==),从中提取纯文件名并暂存 - 跳过分隔行本身,不输出
- 对后续的日志行,先过滤掉包含
str1或str2的内容(和原命令egrep -v '(str1|str2)'效果一致) - 给符合条件的日志行前置文件名和冒号后输出
- 匹配
内容的提问来源于stack exchange,提问作者Jack C.
相关产品推荐
相关产品推荐

