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'
.