sed '/^{/,/^}/!d' < input
Extrairia as partes do arquivo compreendidas entre linhas que começam com { e a próxima linha depois disso que começa com } .
pcregrep -Mo '(?s)(\{(?:[^{}"]++|"(?:\.|[^"])*+"|(?1))*\})' < file
Extrairia os pares de% de nível superior{...} s onde quer que eles estivessem, sendo inteligentes o suficiente para lidar com entradas como {"x":{"y":1}} (aninhado {} ) ou { "x}" } ( } dentro de cadeias) ou { "x\"}" } (aspas escapadas em strings).
Se você não tem e não pode instalar o pcregrep (vem com a biblioteca PCRE), mas você tem o GNU grep , construído com o PCRE, você pode substituir com grep -zo , apesar de carregar o arquivo inteiro em memória. Ou use perl -l -0777 -ne 'print for m{regexp-above}g' .