$ 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.Nlê na próxima linha.$!b againramifica de volta para o rótuloagaincom a condição de que essa não seja a última linha. -
s/{[^}]*}//gIsso 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 againIsso é o mesmo de antes: ele lê todo o arquivo.
-
:bIsso define um rótulo
b. -
s/{[^{}]*}//gIsso remove o texto entre chaves, desde que o texto não contenha chaves internas.
-
t bSe 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.