如何从文本文件中找到包含特定字符串的文本块

如何从文本文件中找到包含特定字符串的文本块

我一直在寻找从文本文件中提取包含字符串的文本块,但没有成功。任何帮助将非常感激。

例如:我有一个名为 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 ::  };

我想提取 $VAR1 和 } 之间的文本块;包含 A0002。所以 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

将输入改为每行一个记录并进行 grep,例如:

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

相关内容