假设我有一个包含以下行的文本文件: -
abcd/efgh/a.jar
{
abcd/efgh/a.class
cdef/ghij/b.class
klmn/opqr/c.class
}
lkmn/opqr/b.zip
{
abcd/efgh/a.class
cdef/ghij/b.class
}
abcd/efgh/a.jar
{
cdef/ghij/b.class
}
现在abcd/efgh/a.jar
在第一种情况下在花括号中有abcd/efgh/a.class
,cdef/ghij/b.class
和klmn/opqr/c.class
。将其视为1块文本。现在abcd/efgh/a.jar
下面的花括号中再次cdef/ghij/b.class
。我想删除此部分/文本块。所以最终的输出必须是: -
abcd/efgh/a.jar
{
abcd/efgh/a.class
cdef/ghij/b.class
klmn/opqr/c.class
}
lkmn/opqr/b.zip
{
abcd/efgh/a.class
cdef/ghij/b.class
}
任何帮助都将受到高度赞赏:)
答案 0 :(得分:0)
在awk
中构建这样的状态机可能不是一个好主意,但这看起来像你想要的那样:
awk '/^{$/{s=1} /^}$/ {s=0} !p; !s{p=k[$0]++}' input
(也就是说,它产生了示例输入的演示输出,但我对一般情况下你想要的东西做了很多假设。)