我已经学会了如何grep
在比赛前后和grep
最后一场比赛中划线,但我还没有发现如何grep
在最后一场比赛中划线以及它下面的线。
该方案是服务器日志。我想列出命令的动态输出。该命令可能会在一个服务器日志中多次使用。所以我想匹配将是命令,并且grep
可以以某种方式-A
与其他标志或尾部命令的变体一起使用,以完成我正在寻找的结果。
我会采用这种方法来扭转问题,因为它更容易找到第一个匹配项并打印上下文行。拿文件:
$ cat file
foo
1
2
foo
3
4
foo
5
6
假设我们想要最后一个匹配项foo
和以下内容,lines
我们可以使用 反转文件tac
,找到第一个匹配项和n
上面的行 using-Bn
并停止使用-m1
。然后用 tac 简单地重新反转输出:
$ tac file | grep foo -B2 -m1 | tac
foo
5
6
类似tac
和的工具rev
可以使看似困难的问题变得容易得多。
使用 awk 代替:
awk '/pattern/{m=$0;l=NR}l+1==NR{n=$0}END{print m;print n}' foo.log
小测试,找到匹配的最后一行/8/
和下一行:
kent$ seq 20|awk '/8/{m=$0;l=NR}l+1==NR{n=$0}END{print m;print n}'
18
19