【问题标题】:multiline search pattern in linuxlinux中的多行搜索模式
【发布时间】:2013-12-14 01:26:03
【问题描述】:

我正在尝试使用 grep 在 linux 中执行多行搜索,但遇到了问题。 基本上我想提取下面示例中Sequences 字符串后面的所有行。

Query= BRNW_157
Sequences producing significant alignments:                          (Bits)  Value
Query= BRNW_428
Query= BRNW_503
Sequences producing significant alignments:                          (Bits)  Value
Query= BRNW_601
Query= BRNW_617
Sequences producing significant alignments:                          (Bits)  Value

我试过 awk 但它不起作用... awk '/Query=*/,/Sequences*/' 然后我使用了 grep,它也不起作用...grep -PZo 'Query=*\n.*sequences'。 有没有办法解决这个问题?

【问题讨论】:

    标签: search awk grep


    【解决方案1】:

    您是说要查找单词 Sequences 并打印该行加上它之前的行吗?

    那就是:

    awk '/Sequences/{print prev ORS $0} {prev=$0}' file
    

    【讨论】:

      【解决方案2】:

      你可能正在寻找

      grep -oPz '(?ms)Query=(?:(?!Query).)*?Sequences.*?$'
      

      这会通过(?ms) 传递 PCRE MULTILINE 和 DOTALL 标志,并从Query 行中挑选出每个段到下一个Sequences 行。

      此外,传递给-z 标志强制它将NUL 视为行分隔符,从而使文件的内容显示为单个字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-26
        • 2022-10-14
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多