7

我已经学会了如何grep在比赛前后和grep最后一场比赛中划线,但我还没有发现如何grep在最后一场比赛中划线以及它下面的线。

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

4

2 回答 2

14

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

$ 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可以使看似困难的问题变得容易得多。

于 2013-09-13T10:43:48.987 回答
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
于 2013-09-13T08:10:48.750 回答