我已经在StackExchange网站上搜索过了,但是我还没有找到我想要的任何东西。以下是grep的两个用例:
我正在尝试解析一个日志文件,我想返回日志中的最后一个错误,这是可以预见的,在文件的末尾。但是,有时错误是多行的。“如何实现最后一次匹配”的答案都涉及到尾部或头部,并且只使用一行。
在我的例子中,我只想返回文件中的所有内容,从最后一次匹配开始。通常情况下,这将不会超过10-15行,所以grep -A 15可以在那里完成任务。但是,我仍然只需要得到其中的最后一个,这样就不能单独产生正确的输出。
天真的方法是使用两部分匹配,首先得到最后一次匹配,然后再进行所有操作。这对我来说行不通,因为我不能保证最后一场比赛是独一无二的。
是否有可能以某种方式使用grep来做到这一点,或者是否有更好的工具?
发布于 2021-06-07 21:54:40
有一种方法可以让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发布于 2021-06-08 05:51:36
我想在某个地方有一个精确的复制品,但我只找到了这些相近的:
有一种方法可以做到:
$ cat ip.txt
foo123
error 1
xyz
error 2
99999
88888
$ tac ip.txt | sed '/error/q' | tac
error 2
99999
88888https://stackoverflow.com/questions/67878994
复制相似问题