Eu tenho algumas centenas de arquivos de código-fonte html. Eu preciso extrair o conteúdo de um <div>
elemento específico de cada um desses arquivos, então eu vou escrever um script para percorrer cada arquivo. A estrutura do elemento é assim:
<div id='the_div_id'>
<div id='some_other_div'>
<h3>Some content</h3>
</div>
</div>
Alguém pode sugerir um método pelo qual eu possa extrair a div the_div_id
e todos os elementos filho e conteúdo de um arquivo usando a linha de comando do linux?
fonte
hxselect
é mais exigente quanto ao formato de entrada do quepup
. Por exemplo, eu estou ficandoInput is not well-formed. (Maybe try normalize?)
comhxselect
ondepup
apenas analisá-lo.Experimente
pup
, uma ferramenta de linha de comando para processar HTML. Por exemplo:fonte
Aqui está um script Perl não testado que extrai
<div id="the_div_id">
elementos e seu conteúdo usandoHTML::TreeBuilder
.Se você é alérgico ao Perl, o Python possui
HTMLParser
.PS Não tente usar expressões regulares. .
fonte
Aqui está o Ex one-liner para extrair essa parte de cada arquivo:
Para salvar / substituir no local, mude
-cqa!
para-cxa
e remova a%p
seção. Para recursividade, considere usar globbing (**/*.html
).Basicamente, para cada buffer / arquivo (
bufdo
), ele executa as seguintes ações:/pattern
- encontre o padrãonorm
- comece a simular pressionamentos de tecla Vi normaisn
- pule para o próximo padrão (necessário no modo Ex)vatd
- remova a seção de tag externa selecionada (consulte: saltando entre tags html )ggdG
- remova todo o buffer (equivalente a:%d
)"2p
- cole novamente o texto excluído anteriormenteTalvez não seja muito eficiente e não POSIX (
:bufdo
), mas deve funcionar.fonte