.jsonコンテンツを含む任意のテキストを提供するプログラムの出力があります。たとえば、次のようになります。
blablablabla
blablab some more text
blablablabla
blablab some more text
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
blablablabla
blablab some more text
blablablabla
blablab some more text
私はjqを使って解析するために.jsonの外側のテキストを整理したいと思います。
このテキストが必要です。
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
ありがとうございます!
ベストアンサー1
sed '/^{/,/^}/!d' < input
{
で始まる行から始まる次の行の間に含まれるファイル部分が抽出されます}
。
pcregrep -Mo '(?s)(\{(?:[^{}"]++|"(?:\\.|[^"])*+"|(?1))*\})' < file
(入れ子)、(文字列内)、(文字列からエスケープされた引用符){...}
などの入力を処理できるように、最上位のペアをインテリジェントに抽出します。{"x":{"y":1}}
{}
{ "x}" }
}
{ "x\"}" }
pcregrep
PCREライブラリに付属のPCREライブラリがなくインストールできませんが、PCREで構築されたGNUがある場合は、ファイル全体をメモリにロードしてもそれを置き換えることができますgrep
。grep -zo
またはperl -l -0777 -ne 'print for m{regexp-above}g'
。