내 파일에 다음 내용이 있습니다. Vim이나 Terminal을 사용하여 아래와 같이 헤더와 해당 내용을 추출하고 싶습니다.
이 목표를 어떻게 달성할 수 있나요?
Topic 1 - Core: Algebra
1.1
Arithmetic sequences and series; sum of finite arithmetic series; geometric sequences and series; sum of finite and infinite geometric series.
Sigma notation.
Applications.
1.2
Exponents and logarithms.
....
....
문서
"json_data" : {"data":[[{"data":{"title":"Topic 1 - Core: Algebra","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1885,"id":"syllabus_section_tree_node_1885"},"children":[{"data":{"title":"1.1","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1886,"id":"syllabus_section_tree_node_1886"},"children":[{"data":{"title":"Arithmetic sequences and series; sum of finite arithmetic series; geometric sequences and series; sum of finite and infinite geometric series.","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1895,"id":"syllabus_section_tree_node_1895"}},{"data":{"title":"Sigma notation.","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1896,"id":"syllabus_section_tree_node_1896"}},{"data":{"title":"Applications.","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1897,"id":"syllabus_section_tree_node_1897"}}]},{"data":{"title":"1.2","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1887,"id":"syllabus_section_tree_node_1887"},"children":[{"data":{"title":"Exponents and logarithms.","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1898,"id":"syllabus_section_tree_node_1898"}},{"data":{"title":"Laws of exponents; laws of logarithms.","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1899,"id":"syllabus_section_tree_node_1899"}},{"data":{"title":"Change of base.","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1900,"id":"syllabus_section_tree_node_1900"}}]},{"data":{"title":"1.3","attr":{"href":"javascript:void(0);"}},"attr":{"data-record-id":1888,"id":"syllabus_section_tree_node_1888"},
…
답변1
grep -oP '(?<="title":").*?(?=")' <INPUT_FILE>
설명하다
grep -oP
-o
: Perl 구문을 사용하여 일치하는 항목 만 인쇄하려면 grep을 사용하세요-p
.(?<="title":")
: Perl은 거꾸로 검색합니다. 이전 문자열과 일치합니다"title":"
..*?
: 일치(및 인쇄)할 실제 부분입니다. 미리보기(다음) 앞의 "탐욕스럽지 않은" 문자 수와 일치합니다.(?="
): Perl 예측."
다음 문자열 과 일치합니다 .
답변2
이것이기 때문에JSON, JSON 파서를 사용하겠습니다.
Python에는 사용이 매우 간단한 JSON 라이브러리가 있습니다. 단일 함수 호출만으로 Python 데이터 구조 형태로 데이터를 얻은 다음 반복할 수 있습니다.
#!/usr/bin/python
import json, sys
def explore(tree):
if isinstance(tree, list):
for child in tree:
explore(child)
return
if tree.has_key("title"):
print tree["title"]
if tree.has_key("data"):
explore(tree["data"])
if tree.has_key("children"):
explore(tree["children"])
data = json.loads("{" + sys.stdin.read() + "}")["json_data"]
explore(data)