Suponha que eu tenha algumas linhas como
author = {Bill Catsman},
title = {{Hello} {{Cruel} {World}}}
e quero remover todos, exceto o primeiro e o último colchetes de title
. Posso fazer sed -r 's/title\ \=\ \{//2g'
para me livrar dos {
s extras, mas como posso me livrar dos }
s extras?
A saída desejada é
author = {Bill Catsman},
title = {Hello Cruel World}
Para remover todas as ocorrências de
{
ou}
desde que estejam dentro de outro{...}
:Isso tem o efeito de manter apenas as chaves externas.
Como funciona:
:a
Isso define um rótulo
a
.s/(\{.*)[{}](.*\})/\1\2/
Isso procura quaisquer chaves que estejam dentro de outro conjunto de chaves e as remove.
ta
Se o último comando substituto fez uma alteração na linha, pule para o rótulo
a
e tente novamente.