テキストファイルで特定の文字列を含むテキストブロックを見つける方法

テキストファイルで特定の文字列を含むテキストブロックを見つける方法

私は成功せずにテキストファイルから文字列を含むテキストブロックを抽出しようとしました。どんな助けでも大変感謝します。

例:次の内容を含むxyzというファイルがあります。

10:10:10 ::  blah blah blah
10:10:10 ::  blah blah blah
10:10:11 ::  $VAR1 = {
10:10:11 ::     'Id' = 'A0001'
10:10:11 ::     'Name' => 'Smith'
10:10:12 ::     'Age' => '21'
10:10:12 ::  };
10:10:12 ::  blah blah blah
10:10:12 ::  blah blah blah
10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };
10:10:15 ::  blah blah blah
10:10:16 ::  blah blah blah
10:10:16 ::  $VAR1 = {
10:10:16 ::     'Id' = 'A0003'
10:10:16 ::     'Name' => 'Adams'
10:10:16 ::     'Age' => '25'
10:10:16 ::  };

A0002を含む$ VAR1と}の間のテキストブロックを抽出したいと思います。したがって、sed/grep/awk の結果は次のようになります。

10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };

これまで、以下を使用して$ VAR1と}の間のすべてのテキストブロックを正常に抽出しました。

sed -n "/VAR1/,/};/p" xyx

次を返します。以下を含むテキストA0002をフィルタリングする方法はありますか?

10:10:11 ::  $VAR1 = {
10:10:11 ::     'Id' = 'A0001'
10:10:11 ::     'Name' => 'Smith'
10:10:12 ::     'Age' => '21'
10:10:12 ::  };
10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };
10:10:16 ::  $VAR1 = {
10:10:16 ::     'Id' = 'A0003'
10:10:16 ::     'Name' => 'Adams'
10:10:16 ::     'Age' => '25'
10:10:16 ::  };

ベストアンサー1

入力を1行に1つのレコードに変更し、grepを使用します。たとえば、次のようになります。

cat input.txt | tr '\n' ' ' | tr ';' '\n' | egrep A0002

おすすめ記事