从不断变化的日志文件中读取

从不断变化的日志文件中读取

有一个/location/of/thefile,它是一个不断变化的日志文件。平均刷新密度为每分钟 4 次,可能的最大刷新率可能为每分钟 30-40 次。每次刷新都会增加 2-5 行(平均),但在极端情况下可能会增加数百行。每行以[YYYY-MM-DD HH:MM:SS]时间戳开头,后跟纯文本(100-200,最多几百个字符)。

我的任务是构建一个简单的命令它持续监视此日志文件,并将包含以下内容的每一行发送到标准输出foo 或者 bar字母字符串。在这些(子)字符串之前和之后可以有任何字符(\n当然,仅在(子)字符串之后),甚至\0。单词的大写可以是所有可能的变体。

好吧,我对解决方案的想法总是包含计时系统调用,但我不应该使用它们。请为我构造一个简单的命令。非常感谢!

答案1

我可能误解了这个问题,但是你有理由不能使用这个吗?

tail -f /location/of/thefile | grep -i -E "foo|bar"

答案2

像这样使用命名管道:

让我们假设我们想要logfile.txt连续读取文件并执行存储在readfile.sh.

# readfile.sh

while read line
do
  echo $line
done < mypipe
$ mkfifo mypipe
$ #this will block (will not exit)
$ ./readfile.sh

在另一个 shell 中,但在同一个目录中(文件 mypipe 所在的位置):

$ # This will go to background
$ tail -f logfile.txt >> mypipe &

完毕。无论不断进入 logfile.txt 的内容都将通过readfile.sh未退出的方式打印。

相关内容