仅当两个模式都匹配时,如何删除连续的 2 行

jea*_*iot 1 perl awk sed

让我们考虑这个简单的文件:

{
bla bla
bla bla bla
}
{
bla bla
bla bla bla
}
bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)

我只需要删除那些连续的行:

}
{
Run Code Online (Sandbox Code Playgroud)

结果应该是:

{
bla bla
bla bla bla
bla bla
bla bla bla
}
bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

sed -e '/^}$/,/^{$/d' file
Run Code Online (Sandbox Code Playgroud)

不幸的是,最后一个大括号和剩余的行已被删除:

{
bla bla
bla bla bla
bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

如有必要,我愿意接受任何涉及其他工具(例如 awk/perl/...)的简单解决方案。

anu*_*ava 5

你可以使用这个sed

sed '/^}$/ { N; /\n{$/ d; }' file

{
bla bla
bla bla bla
bla bla
bla bla bla
}
bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)

内联保存更改:

sed -i.bak '/^}$/ { N; /\n{$/ d; }' file
Run Code Online (Sandbox Code Playgroud)

或者,这awk也可以:

sed -i.bak '/^}$/ { N; /\n{$/ d; }' file
Run Code Online (Sandbox Code Playgroud)