문서

문서

내 파일에 다음 내용이 있습니다. 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)

관련 정보