grep最后一场比赛,它是以下几行

时间:2013-09-13 07:13:46

标签: grep match

我已经了解了比赛前后的grep行以及grep最后一场比赛,但我还没有发现如何grep最后一场比赛以及下面的线路它

该方案是服务器日志。 我想列出命令的动态输出。该命令可能在一个服务器日志中多次使用。所以我想匹配将是命令,不知何故grep可以使用-A与其他标志或尾部命令的变体,来完成我正在寻找的结果。

2 个答案:

答案 0 :(得分:11)

我会采取这种方法来解决问题,因为它更容易找到第一个匹配并打印上下文行。拿文件:

$ cat file
foo
1
2
foo
3
4
foo
5
6

假设我们想要foo的最后一场比赛以及lines的以下内容,我们可以使用tac撤消该文件,找到上面的第一个匹配和n-Bn并停止使用-m1。然后使用tac:

简单地重新反转输出
$ tac file | grep foo -B2 -m1 | tac
foo
5
6

tacrev这样的工具可以让问题变得更加容易。

答案 1 :(得分:1)

使用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