【问题标题】:grep last match and it's following linesgrep 最后一场比赛,它是以下几行
【发布时间】:2013-09-17 19:00:22
【问题描述】:

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

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

【问题讨论】:

    标签: grep match


    【解决方案1】:

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

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

    假设我们想要foo 的最后一个匹配项和下面的lines,我们可以使用tac 反转文件,使用-Bn 找到第一个匹配项和上面的n 行并停止使用@987654327 @。然后简单地用 tac 重新反转输出:

    $ tac file | grep foo -B2 -m1 | tac
    foo
    5
    6
    

    tacrev 之类的工具可以让看似困难的问题变得更容易。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-08-24
        • 2014-08-16
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多