最后一场比赛打到最后



我浏览了StackExchange网站,但没有找到任何我想要的东西。以下是grep的两个用例:

  • 在比赛前/比赛后打印项目
  • 打印某个匹配项

我正在尝试解析一个日志文件,我想返回日志中的最后一个错误,可以预见,它位于文件的末尾。然而,有时错误是多行。"如何在最后一场比赛中获胜"的答案都涉及尾巴或头部,并且只适用于一行。

在我的情况下,我只想返回文件中的所有内容,最后一个匹配开始。通常情况下,这最多不会超过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最后一场比赛和它';s下列行

这里有一种方法:

$ cat ip.txt
foo123
error 1
xyz
error 2
99999
88888
$ tac ip.txt | sed '/error/q' | tac
error 2
99999
88888

最新更新