如何解决Grep 最后一场比赛直到结束
我浏览了 StackExchange 站点,但没有找到任何我正在寻找的内容。下面是 grep 的两个用例:
- 在比赛之前/之后打印项目
- 打印某个匹配项
我正在尝试解析一个日志文件,我想返回日志中的最后一个错误,可以预见的是,它位于文件末尾。但是,有时错误是多行。 'how to grep the last match' 的答案都涉及到尾部或头部,并且只适用于一行。
就我而言,我只想返回文件中的所有内容,从最后一场比赛开始。通常,这最多不会超过 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
,
我认为某处有一个完全相同的副本,但我只找到了这些接近的:
这是一种方法:
$ cat ip.txt
foo123
error 1
xyz
error 2
99999
88888
$ tac ip.txt | sed '/error/q' | tac
error 2
99999
88888
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。