grep last match及其';下面几行
我已经学会了如何在比赛前后grep last match及其';下面几行,grep,match,Grep,Match,我已经学会了如何在比赛前后grep行,以及如何grep最后一场比赛,但我还没有学会如何grep最后一场比赛及其下面的行 该场景是一个服务器日志。 我想列出命令的动态输出。该命令可能在一个服务器日志中使用多次。因此,我设想匹配将是命令,并且不知何故,grep可以使用-A和其他标志或尾部命令的变体来完成我正在寻找的结果。使用awk代替: awk '/pattern/{m=$0;l=NR}l+1==NR{n=$0}END{print m;print n}' foo.log 小测试,找到与/8/匹配的
grep
行,以及如何grep
最后一场比赛,但我还没有学会如何grep
最后一场比赛及其下面的行
该场景是一个服务器日志。
我想列出命令的动态输出。该命令可能在一个服务器日志中使用多次。因此,我设想匹配将是命令,并且不知何故,grep
可以使用-A
和其他标志或尾部命令的变体来完成我正在寻找的结果。使用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
我将采用这种方法来解决这个问题,因为找到第一个匹配项并打印上下文行更容易。以文件为例:
$ cat file
foo
1
2
foo
3
4
foo
5
6
假设我们想要最后一个匹配的foo
和下面的行
,我们可以使用tac
反转文件,找到第一个匹配,并使用-Bn
找到上面的n
行,然后停止使用-m1
。然后简单地用tac重新反转输出:
$ tac file | grep foo -B2 -m1 | tac
foo
5
6
像tac
和rev
这样的工具可以使看似困难的问题变得容易得多