$ sed ':again;$!N;$!b again; s/{[^}]*}//g' file
This is
that wants
anyway.
Explicação:
-
:again;$!N;$!b again;
Isto lê todo o arquivo no espaço padrão.
:again
é um rótulo.N
lê na próxima linha.$!b again
ramifica de volta para o rótuloagain
com a condição de que essa não seja a última linha. -
s/{[^}]*}//g
Isso remove todas as expressões entre chaves.
No Mac OSX, tente:
sed -e ':again' -e N -e '$!b again' -e 's/{[^}]*}//g' file
Chaves aninhadas
Vamos considerar isso como um arquivo de teste com muitas chaves aninhadas:
a{b{c}d}e
1{2
}3{
}
5
Aqui está uma modificação para lidar com chaves aninhadas:
$ sed ':again;$!N;$!b again; :b; s/{[^{}]*}//g; t b' file2
ae
13
5
Explicação:
-
:again;$!N;$!b again
Isso é o mesmo de antes: ele lê todo o arquivo.
-
:b
Isso define um rótulo
b
. -
s/{[^{}]*}//g
Isso remove o texto entre chaves, desde que o texto não contenha chaves internas.
-
t b
Se o comando substituto acima resultou em uma alteração, retorne ao rótulo
b
. Desta forma, o comando substituto é repetido até que todos os grupos de chaves sejam removidos.