使用 sed、grep、awk 或 ruby,有什么简单的方法可以找到最后的匹配较大日志文件中的字符串,并将其后面的每一行(包括)发送到另一个文件?
例子:
grep -A222 "_____________" recent/toptrigs.OX.rb.log
是我最近的解决方法,因为 222 行上下文后记应该总是首先命中 EOF,除了我希望它从最后的的实例“_____“字符串。它是一个从同一进程同时生成的日志文件(因此我在每个项目循环的末尾手动刷新 STDOUT 和 STDERR,并考虑到此段剪切)。
答案1
我认为最简单的方法是在匹配之前反转输入:
<logfile tac | sed '/pattern/q' | tac
答案2
这里有一些选项。
您可以利用
tac
反转行的顺序,然后使 grep 包含之后的行(现在是之前的行,因为它是相反的)并在第一个匹配之后停止它,然后再次反转它以恢复顺序,如下所示:tac /path/to/file | grep -m 1 -B 1 "mypattern" | tac
去掉最后一个匹配项和下面的行之外的行:
grep -A 1 "mypattern" /path/to/file | tail -n 2
您应该在您的文件上尝试一下,看看哪个在您的情况下表现更好。
您可以通过在命令前面添加标准输出重定向来将输出附加到日志文件>> /path/to/outputfile
。