Grep 最后一场比赛直到结束

Grep last match until the end

我查看了 StackExchange 网站,但没有找到任何我正在寻找的东西。以下是 grep 的两个用例:

我正在尝试解析日志文件,我想 return 日志中的最后一个错误,可以预见,它位于文件末尾。但是,有时错误是多行的。 'how to grep the last match' 的答案都涉及尾部或头部,并且只适用于一行。

就我而言,我只想return 文件中的所有内容, 最后一场比赛开始。通常,最多不会超过 10-15 行,因此 grep -A 15 就可以解决问题。但是,我仍然只需要获取其中的最后一个,因此仅此一项并不能产生正确的输出。

天真的方法是使用两部分匹配,首先获取最后一个匹配项是什么,然后是之后的所有内容。这对我不起作用,因为我不能保证最后一场比赛是独一无二的。

是否可以用 grep 以某种方式做到这一点,或者会有更好的工具吗?

有一种方法可以让 sed 执行此操作,但我不记得了。

如果您愿意使用命令组合,这里可能有用:

# Get the line number of teh last match

LNO=$( grep -n 'the error' the_file | tail -1 | cut -d":" -f1 )

# Now use sed to print all lines from that point:

sed -n "$LNO,$p" the_file

我认为某处有完全相同的副本,但我只找到了这些相似的副本:

  • grep last match and it's following lines

这是一种方法:

$ cat ip.txt
foo123
error 1
xyz
error 2
99999
88888

$ tac ip.txt | sed '/error/q' | tac
error 2
99999
88888