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

15 command-line logs tail watch

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

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

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

Sea*_* C. 31

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

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

  • @Kromey,取决于管道后的命令。如果是 `sort` 或 `wc` 它将等待 `end-of-file` 开始排序,如果是 `grep` 或 `sed` 或其他行处理命令,它会在每一个 `end-of` 处理输入-line`,这是刷新 I/O 流缓冲区的默认字符。 (6认同)
  • 它有效,我经常使用它;大多数时候为whiney 用户跟踪邮件。`tail -f /var/log/mail.log | grep -i "whineyUser@myDomain.com"` (2认同)