【问题标题】:To get the list of elements after pattern element is matched [duplicate]在匹配模式元素后获取元素列表[重复]
【发布时间】:2014-07-31 18:32:26
【问题描述】:

我有一个文本文件

$ cat a.txt
a_1  
a_2  
a_3  
a_4  
a_5  

如果我搜索 a_2,我需要获取 a_2 之后的所有元素,包括它。
预期输出是

a_2
a_3
a_4
a_5

请帮忙。

【问题讨论】:

  • @fedorqui,不一定是重复的,因为另一个问题是特定于 sed 的,这给出了不同方法的答案。
  • @Jidder 你在那个问题中看到了被接受的答案吗?它的解决方案是在 awk 和 sed 中。
  • 虽然没有 sed 或 awk,但还有更多方法可以做到这一点!
  • @Jidder 标记为重复的要点是将知识集中在一个点上,而不是在不同的类似问题上散布好的答案。因此,如果您想添加一个新的好答案,您可以在“主要”问题中做,这会成为一个很好的知识点。
  • @fedorqui 也许其他问题的标题可以更改为不特定于 sed 呢?

标签: bash shell awk sed grep


【解决方案1】:

试试这个

awk "/a_2/ { flag = 1 }; flag" file

【讨论】:

    【解决方案2】:

    使用 awk 很简单。

    awk '/a_2/{p=1}p' your_file
    

    【讨论】:

      【解决方案3】:

      通过 sed,

      $ sed -n '/a_2/,/&/p' file
      a_2  
      a_3  
      a_4  
      a_5 
      

      【讨论】:

      • 你能解释一下 //&/ 吗?这个& 背后的参考是什么,通常这是以前的匹配模式,但在这里?如果 & 是“未发现”模式,为什么不简单的 /a_2/,$p 呢?
      • 我认为/&/ 匹配到最后一行。
      • 我相当肯定& 指向任何sed 在模式空间中的内容。因此它搜索a_2,找到并将其放入模式空间,然后再次搜索a_2(由& 引用)但它从未找到它,所以它只是继续打印文件的其余部分
      • sed -n '/a_2/,$p' file
      【解决方案4】:

      最简单的方法。

      more +"a_2" file
      

      【讨论】:

        猜你喜欢
        • 2020-10-27
        • 2015-08-08
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多