我有可以重新启动其内部状态的长时间运行的程序。我只想查看最新状态的日志文件条目(加载到vim
's quickfix)。如何在最后一次出现字符串后显示所有行STARTING SESSION
?
我目前的解决方案(日志文件有时有千兆字节长,所以我从不查看超过最后 5000 行的内容):
tail -n5000 logfile.log | grep -B5000 -v -e 'STARTING SESSION'> shortened.log
Run Code Online (Sandbox Code Playgroud)
当会话产生大量日志时,这很有效,但如果我有更短的日志并多次重启,则它包含多个会话。
本质上,我想要一个类似于--reverse
标志的东西,它可以从文件的末尾而不是开头进行 grep 搜索:
grep --reverse --after-context=5000 --max-count=1 'STARTING SESSION' logfile.log
Run Code Online (Sandbox Code Playgroud)
笔记:
问题类似于在第 n 次出现匹配后打印行,但我想要最后一次出现。
该问题与在 POSIX.2 中从最后一个标记获取文本到 EOF几乎相同,只是我没有 POSIX 要求并且我的文件很大。我更喜欢使用 GNU utils 的高效解决方案(我正在使用mingw64
)。