小编idb*_*rii的帖子

仅在最后一次出现令牌后才打印文件内容?

我有可以重新启动其内部状态的长时间运行的程序。我只想查看最新状态的日志文件条目(加载到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)。

grep gnu text-processing

7
推荐指数
2
解决办法
438
查看次数

标签 统计

gnu ×1

grep ×1

text-processing ×1