sed '/^{/,/^}/!d' < input
Будет извлекать части файла, содержащиеся между строками, начинающимися с {
, и следующей строкой после этой, начинающейся с }
.
pcregrep -Mo '(?s)(\{(?:[^{}"]++|"(?:\\.|[^"])*+"|(?1))*\})' < file
Будет извлекать пары верхних -уровней {...}
, где бы они ни находились, будучи достаточно умным, чтобы справляться с вводом, например {"x":{"y":1}}
(, вложенным{}
)или{ "x}" }
(}
внутри строк )или { "x\"}" }
(. экранированные кавычки в строках ).
Если у вас нет и вы не можете установитьpcregrep
(поставляется с библиотекой PCRE ), но у вас есть GNU grep
, построенный с помощью PCRE, вы можете заменить на grep -zo
, хотя это загружает всю файл в памяти. Или используйте perl -l -0777 -ne 'print for m{regexp-above}g'
.