Utilitário para dobrar ou re-indentificar de forma não destrutiva

2

Eu tenho um script que recebe dados de wget ou similar e procura por palavras-chave usando grep . (Eu prometo que não estou tentando analisar HTML com expressões regulares, é apenas uma maneira conveniente de emular o comportamento de detecção de conteúdo que temos em outro produto muito mais complexo.) Isso funciona muito bem, desde que o conteúdo HTML não seja muito severamente minificada. Quando isso acontece, as linhas podem ficar muito longas (mais de 50 kB em alguns casos eu vi), e grep engasga com elas.

Para remediar isso, eu gostaria de poder dobrar ou recuar o HTML para que ele seja distribuído em mais linhas. No entanto, para que o script forneça resultados precisos, preciso fazer isso sem alterar o conteúdo. Isso significa que não é possível corrigir tags inválidas ou não fechadas e deve ser dobrado apenas entre elementos, não dentro deles.

Estes dois requisitos parecem excluir todos os utilitários de organização de HTML que foram encontrados.

Existe algum utilitário de shell baseado em UNIX, módulos perl / python / ruby ou semelhante que possa fazer isso por mim?

Como alternativa, já que tudo que eu preciso é adicionar algumas linhas novas entre as tags, existe uma maneira que eu possa fazer isso de maneira semi-confiável?

    
por kine 05.09.2013 / 21:21

4 respostas

1

Ok, para qualquer um que precise disso, estou gravando as sugestões feitas em este tópico incrível (caso esse link fique inativo, de acordo com as diretrizes do StackExchange):

  • HTB 2.0 - baseado em DOS - link

  • Tabifier - suporta CSS, HTML e C style syntax (incluindo Javascript) - link

  • HTML-Kit - um editor de HTML gratuito completo em execução no Windows, você precisa configurar as opções de TIDY [Ferramentas / Verificar código usando Tidy / Adicionar nova configuração], desmarcar todos os swithes, exceto "Produzir apenas o conteúdo do corpo "e" Converta espaço sem interrupções em entidades ", depois vá para Ações / Ferramentas / Tag HTML Tidy / Indent ou embeleze - link

  • SCREEM - somente para Linux -

  • NetBeans - "Depois de abrir um arquivo html com o NetBeans, clique em Origem e selecione Formatar. É isso." -

  • Embelezador HTML / XHTML do WebmasterGate - Ferramenta on-line - link

  • Aptana Studio (Versão 2.0.4) - "Selecione Editar > Formatar ou pressione Ctrl-Shift F para formatar o código html. A função de formatação pode ser configurada em Preferências do Windows > e selecione Aptana > Editores > HTML > Formatação, clique em Editar para adicionar tags que não devem ter uma nova linha e salve-a como uma nova preferência. " -

  • UniversalIndentGUI - Usa o HTB Beautifier internamente - Durante a execução do Notepad ++, acesse Plugins > Gerenciador de plug-ins > Mostrar gerenciador de plug-ins, selecione UniversalIndentGUI na lista disponível para instalá-lo.

  • arrumado com estas opções:

(texto de preenchimento, uma vez que o mecanismo de markdown parece ter problemas quando o código segue diretamente os marcadores)

[HTML, XHTML, XML Options]
anchor-as-name:no
doctype:omit
drop-empty-paras:no
fix-backslash:no
fix-bad-comments:no
fix-uri:no
input-xml:yes
join-styles:no
lower-literals:no
preserve-entities:yes
quote-ampersand:no
quote-nbsp:no

[Diagnostics Options]
show-warnings:no

[Pretty Print Options]
indent:yes
indent-spaces:3
tab-size:3

[Miscellaneous Options]
quiet:yes

Ainda estou tentando experimentar essas opções (as sugestões de configuração input-xml: yes e force-output: yes para HTML foram mencionadas link funciona para o meu propósito imediato), irá atualizar esta resposta se eu fizer.

    
por 18.09.2013 / 19:24
0

Execute o arquivo por meio de HTML Tidy .

Por exemplo:

curl http://superuser.com | tidy -i | less

-i é para recuo da entrada.

    
por 05.09.2013 / 21:51
0

A maneira mais simples de fazer isso sem analisar / corrigir o documento é procurar uma tag de fechamento, seguida de um colchete de abertura ou espaço em branco, e inserir uma nova linha. Pesquisar por:

(</[^>]+>)(<|\s)

e substitua por

$1\n$2

Você ainda precisará verificar manualmente cada documento de saída e verificar se ele não quebrou nada, mas isso deve funcionar na maioria dos casos. Não será uma boa saída, mas deverá matar linhas de 50 KB.

    
por 05.09.2013 / 21:58
0

Outra opção é usar o filhote sem argumentos:

pup

Em xmllint --html usa um analisador de HTML e --format reformata a entrada. O traço para STDIN não pode ser omitido.

xmllint --format --html -

O XmlStarlet também suporta o uso de um analisador de HTML. fo é a abreviação de format . Veja xml fo -h para ajuda.

xml fo --html

A implementação principal de tidy não suporta HTML5, mas tidy-html5 . brew install tidy-html5 instala tidy-html5 como /usr/local/bin/tidy no OS X.

    
por 08.09.2016 / 21:38