私は成功せずにテキストファイルから文字列を含むテキストブロックを抽出しようとしました。どんな助けでも大変感謝します。
例:次の内容を含む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