有什么方法可以向后运行 grep,即从文件末尾向上运行?

有什么方法可以向后运行 grep,即从文件末尾向上运行?

我有一个 70G+ 日志文件,我想要符合模式的最新条目(apache 日志在末尾附加新项目)。我可以:

run grep | tail

或者

run tail | grep

选项 1 会花很长时间。选项 2 可能什么也不会返回,那么我必须增加 tail 的计数并继续运行直到得到结果。

如果我可以从最后一行到第一行执行 grep,那就太理想了。但我在 grep 的手册页上找不到任何选项。

有什么技巧可以做到这一点吗?单独使用 grep 还是与任何其他 Linux 工具组合?

答案1

我认为对您最有帮助的命令是 tac:http://linux.die.net/man/1/tac

正如它所述:
tac - 反向连接和打印文件

因此,您可以将其通过管道传输到 grep 并匹配 nnn 行然后才停止,或者类似的事情。

答案2

这是一个很大的文件。您应该更频繁地轮换这些日志。

如果tac太慢,您可以选择一种带有seek命令的编程语言(例如 perl),然后:

  • 打开文件
  • 寻找到底
  • 迭代地:
    • 向后搜索一定量(4K,或更大)
    • 阅读那么多的文字
    • 按换行符分割,然后搜索任意内容。

相关内容