Grep 最后一场比赛直到结束
Grep last match until the end
我查看了 StackExchange 网站,但没有找到任何我正在寻找的东西。以下是 grep 的两个用例:
- 打印项目 before/after 匹配项
- 打印特定匹配项
我正在尝试解析日志文件,我想 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
我查看了 StackExchange 网站,但没有找到任何我正在寻找的东西。以下是 grep 的两个用例:
- 打印项目 before/after 匹配项
- 打印特定匹配项
我正在尝试解析日志文件,我想 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