grep出力に基づいてテキストブロックを抽出する

grep出力に基づいてテキストブロックを抽出する

現在、次のテキストブロックを含むテキストファイルで作業しています。

--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------

--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------

--------------------------------------
Beginning of block
Text
Random Text
keywordD
Text
End of block
--------------------------------------

--------------------------------------
Beginning of block
Text
Random Text
keywordd
Text
End of block
--------------------------------------

目的はegrepが特定のキーワードを検出できるようにすることです。だから私は現在、以下を検索しています。

if egrep -wi 'keywordA|KeywordB|keywordC' Report
then
        echo "Words found!"

else
        echo "No words found!"
fi

sed(たとえば)を使用して、単語が見つかったテキストブロックをコピーするために後続の操作を追加する方法があるかどうか疑問に思います。

この例で予想される出力は次のとおりです。

--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------

--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------

「レポート」ファイルにはこれらのブロックが数十個含まれていますが、すべてキーワードがあるわけではありません。私はこのようなことをする人々に従いたいだけです。(上記の例に示すように)

ベストアンサー1

魔法命令はとても簡単ですawk

awk -v RS="--------------------------------------"
       '/keywordA/||/keywordB/||/keywordC/' RS='' infile.txt

次のように予想される出力が得られます。

--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------
--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------

おすすめ記事