如何 tail -f 多个文件并在单个输出中单独 grep 每个文件?

如何 tail -f 多个文件并在单个输出中单独 grep 每个文件?

我有几个日志文件(与我的网络服务器相关,又名各种 error_log、access_log 等),我想实时监控它们,即查看最近的更新,并且我需要使用不同的字符串或不进行任何过滤来单独过滤每个文件。

假设我有一组日志文件:file1.log file2.log file3.log file4.log file5.log

file1.log file2.log file3.log我需要的前三个文件按某个字符串过滤string代表路径或用户名的一部分。

file4.log file5.log我需要查看最后两个文件没有任何过滤,即按原样查看他们的更新。

我的知识是,我可以使用tail -f file1.log file2.log file3.log | grep string它为我提供由分隔符分隔的所有三个文件的所需输出==> fileX <==。我对最后两个文件使用的方法相同tail -f file4.log file5.log。这给了我我需要的东西,但这些是单独的命令。

但我不知道如何将这两个命令组合在一起以在终端中获得一个实时输出。

我尝试执行用分号;&&等分隔的两个命令,但这没有按预期工作。

我的问题是如何tail -f使用 tail -f 文件分隔符的高级过滤将多个命令组合成单个输出==> fileX <==

备份问题是否还有其他方法可以处理日志文件更改的实时视图的类似结果?

答案1

思考您正在寻找像以下这样简单的东西:

tail -f file1.log file2.log file3.log | grep string & tail -f file4.log file5.log 

我通过启动此脚本对此进行了测试:

#!/bin/bash
while true; do echo file1 $(date); echo "unwanted"; sleep 3; done >> file1.log &
while true; do echo file2 $(date); echo "unwanted"; sleep 3; done >> file2.log &
while true; do echo file3 $(date); echo "unwanted"; sleep 3; done >> file3.log &


while true; do echo file4 $(date); echo "unwanted"; sleep 3; done >> file4.log &
while true; do echo file5 $(date); echo "unwanted"; sleep 3; done >> file5.log &

正如您所看到的,该脚本将打印出fileN后跟 的输出date,然后unwanted每 3 秒在新行上打印该字符串到 5 个日志文件中的每一个中。然后我运行上面的命令并得到以下输出:

$ tail -f file1.log file2.log file3.log | grep 'file' & tail -f file4.log file5.log 
[4] 861299
==> file4.log <==
file4 Sun Dec 17 01:34:31 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:33 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:34 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:36 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:37 PM EET 2023
unwanted

==> file5.log <==
file5 Sun Dec 17 01:34:31 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:33 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:34 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:36 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:37 PM EET 2023
unwanted
==> file1.log <==
file1 Sun Dec 17 01:34:31 PM EET 2023
file1 Sun Dec 17 01:34:33 PM EET 2023
file1 Sun Dec 17 01:34:34 PM EET 2023
file1 Sun Dec 17 01:34:36 PM EET 2023
file1 Sun Dec 17 01:34:37 PM EET 2023
==> file2.log <==
file2 Sun Dec 17 01:34:31 PM EET 2023
file2 Sun Dec 17 01:34:33 PM EET 2023
file2 Sun Dec 17 01:34:34 PM EET 2023
file2 Sun Dec 17 01:34:36 PM EET 2023
file2 Sun Dec 17 01:34:37 PM EET 2023
==> file3.log <==
file3 Sun Dec 17 01:34:31 PM EET 2023
file3 Sun Dec 17 01:34:33 PM EET 2023
file3 Sun Dec 17 01:34:34 PM EET 2023
file3 Sun Dec 17 01:34:36 PM EET 2023
file3 Sun Dec 17 01:34:37 PM EET 2023

相关内容