/ Linuxの/ multiline検索パターン - 検索、awk、grep

Linuxの複数行の検索パターン - 検索、awk、grep

私はLinuxで複数行の検索を実行するのにgrepを使用しようとしていますが、問題はあります。 基本的には、次の行をすべて抽出したい 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"。 この問題を回避する方法はありますか?

回答:

回答№1は1

Sequencesという単語を見つけて、その行に加えて前の行を印刷したいと言っていますか?

それはちょうど:

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

回答№2の場合は1

あなたはおそらく探している

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

これはPCRE MULTILINEとDOTALLフラグを (?ms) 各セグメントを Query 次の行へ Sequences ライン。

さらに、 -z 渡されたフラグ NULを行区切り文字として扱うようにします。ファイルの内容を単一の文字列として表示します。