仅当两个模式都匹配时,如何删除连续的2行
让我们考虑这个简单的文件:
{
bla bla
bla bla bla
}
{
bla bla
bla bla bla
}
bla bla
bla bla bla
我只需要删除那些连续的行:
}
{
结果应该是:
{
bla bla
bla bla bla
bla bla
bla bla bla
}
bla bla
bla bla bla
我尝试了以下方法:
sed -e '/^}$/,/^{$/d' file
不幸的是,最后一个大括号和剩余的行已被删除:
{
bla bla
bla bla bla
bla bla
bla bla bla
有什么建议吗?
如有必要,我愿意接受任何涉及其他工具(例如 awk/perl/...)的简单解决方案。
回答
你可以使用这个sed:
sed '/^}$/ { N; /n{$/ d; }' file
{
bla bla
bla bla bla
bla bla
bla bla bla
}
bla bla
bla bla bla
内联保存更改:
sed -i.bak '/^}$/ { N; /n{$/ d; }' file
sed -i.bak '/^}$/ { N; /n{$/ d; }' file
或者,这awk也可以: