linux中的多行搜索模式

时间:2013-12-14 01:26:03

标签: search awk grep

我正在尝试使用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'。 有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可能正在寻找

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

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

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

答案 1 :(得分:1)

您是说要找到单词序列并打印该行加上之前的行?

那只是:

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