Extrai linhas de um arquivo usando vim ou teminal

1

Eu tenho o seguinte em um arquivo. Eu gostaria de usar o Vim ou terminal para extrair o título e seu conteúdo assim.

Como posso conseguir isso?

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

arquivo

"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"},

...

    
por shin 25.06.2015 / 07:45

2 respostas

2

grep -oP '(?<="title":").*?(?=")' <INPUT_FILE>

Explicação

  • grep -oP : use grep, imprimindo somente correspondências -o usando a sintaxe Perl -p .
  • (?<="title":") : Perl lookbehind. Corresponder uma string que tenha "title":" antes.
  • .*? : A parte real para combinar (e imprimir). Coincidir com uma quantidade "não-gulosa" de caracteres antes da pré-visualização (próxima).
  • (?=" ): Perl lookahead. Corresponder uma string que tenha " depois.
por 25.06.2015 / 08:11
0

Como isso é JSON , eu usaria um analisador JSON.

O Python tem uma biblioteca JSON que é muito simples de usar - basta fazer uma chamada de função e você obtém os dados como uma estrutura de dados do Python que você pode então iterar.

#!/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)
    
por 26.06.2015 / 02:11