Existem dois problemas com sua primeira tentativa. {.*}
contém caracteres especiais que precisam ser protegidos da expansão pelo shell; Coloque aspas ao redor do padrão. Além disso, {.*}
corresponde ao texto mais longo delimitado por chave na linha, portanto, se você tiver uma linha contendo hello {test1} world {test2} howdy
, a saída será {test1} world {test2}
, porque .*
correspondido test1} world {test2
.
O seguinte mostrará apenas o que está entre parênteses.
grep -o -e "{[^}]*}"
Minha formulação original usava "{. *}", mas com isso o maior suporte encontrado dentro de uma linha, não o menor, seria retornado ...