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