我有这个文件
START1
1
2
END1
START2
error
1
2
END2
START3
1
2
END3
我希望error
找到; sed
提取整件并打印出来
例如out put是
START2
error
1
2
END2
因为在error
和START2
END2
如何仅使用sed
解决问题?!?
答案 0 :(得分:2)
使用sed
:
sed -n ':a;/START/,/END/{/END/!{$!{N;ba;}};/error/p;}' inputfile
我们的想法是在两个指定地址之间的模式空间中添加行。如果找到正则表达式(在这种情况下为字符串error
),则打印该块。除非明确指定,否则-n
不会打印任何内容。
对于您的样本输入,它会产生:
START2
error
1
2
END2
答案 1 :(得分:2)
Perl解决方案:
perl -ne '
$inside = 1 if /START/;
push @lines, $_ if $inside;
$error = 1 if /error/ and $inside;
if (/END/) {
print @lines if $error;
undef @lines;
$inside = 0;
$error = 0;
}
' file