我一直在寻找从文本文件中提取包含字符串的文本块,但没有成功。任何帮助将非常感激。
例如:我有一个名为 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