2013-12-14 50 views
0

我正在嘗試使用grep在linux中執行多行搜索,但遇到問題。 基本上我想在下面的例子中提取所有跟在Sequences字符串後面的行。linux中的多行搜索模式

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'。 有沒有辦法解決這個問題?

回答

1

你是說你想找到Sequences這個單詞並在那行之前打印那行嗎?

那會只是:

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

由於它的工作。簡單而簡單.... – upendra

1

您可能正在尋找

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

這傳遞通過(?ms) PCRE MULTILINE和DOTALL標誌,並挑選出從Query線下一Sequences線各段。

此外,傳遞給-z標誌強制它將NUL作爲行分隔符處理,從而使文件的內容顯示爲一個字符串。

+1

這也是工作....感謝 – upendra