Procurando arquivos HTML localmente sem tags ou script correspondentes

2

Às vezes preciso pesquisar em um diretório local contendo documentos HTML para palavras específicas. Normalmente eu uso um programa chamado File Locator Pro, que funciona muito bem na maioria das vezes.

No entanto, em alguns casos, a palavra que estou procurando é uma palavra-chave comumente usada ou nome de variável em JavaScript ou HTML, como "filho", por exemplo. Nesses casos, como essa pesquisa está apenas no conteúdo do arquivo bruto, os resultados da pesquisa explodem com milhares de correspondências inúteis de scripts ou tags.

Existe alguma maneira de fazer uma pesquisa no conteúdo de um arquivo HTML em vários arquivos HTML, em que a pesquisa ignorará as tags HTML e o script?

Isso não precisa estar usando o File Locator Pro; qualquer solução é de interesse, mas de preferência uma que funcione no Windows e não exija outro software caro.

    
por Kevin 21.12.2017 / 09:56

3 respostas

1

Eu usaria uma ferramenta linnux conhecida para o windows: grep

Agora você terá que fazer algumas partes complicadas do encadeamento para combinar com o que procura e, em seguida, filtrar o máximo de falsos positivos com algo assim para pesquisar age (correspondência <image...> tags e alguns js também no meu caso de teste:

grep -ri 'age' * | grep -v '<script[^>]+>[^<]+<\/script>' | grep -v '<[^>]*age[^>]*>' | grep -E '^[^.]*\.(php|html)'

o que ele faz é o seguinte (cada comando grep):

  • Primeiramente, você recebe todas as linhas contendo age recursivamente com -r e não diferencia maiúsculas de minúsculas com -i
  • Em seguida, corresponde a todas, exceto as que estão em <script*>*</script> block ( -v inverte a correspondência), removendo os blocos de script das correspondências
  • A terceira remove correspondências de uma tag, isso pode excluir resultados válidos como <div id=age>age</div> se as tags estiverem na mesma linha que a palavra pesquisada.
  • Por último, filtre os resultados no nome do arquivo para manter apenas os arquivos php ou html. Isso requer regexes estendidos (opção grep -E ) para a construção A ou B (A|B)

Isso provavelmente é um pouco confuso, mas você NÃO pode analisar html com um regex e analisar todos os arquivos com um (X ) Analisador de HTML para, em seguida, encontrar apenas o texto parece bastante complexo para alcançar também.

    
por 21.12.2017 / 10:29
0

No Windows, você pode usar o grepwin (do desenvolvedor de tartaruga) para executar o grep com um gui nos sistemas Windows. Pode conseguir praticamente tudo que o gnu grep pode.

Outra forma seria instalar o cygwin e depois usar o grep como de costume.

    
por 21.12.2017 / 11:09
0

A linha de comando do Windows (ainda) não é tão poderosa quanto nos sistemas * nix - mas, mesmo lá, seus cenários e desejos não são resolvidos prontamente. Como @Tensibai disse: você está basicamente querendo analisar os arquivos para ocorrências baseadas em contexto. O Windows light grep é hoje chamado de findstr , um pouco melhor que o antigo find , mas em nenhum lugar tão poderoso quanto o grep. Se você instalar o cygwin como @ fab2s sugeriu que provavelmente poderia criar um script que faça algo como o seguinte:

  • encontre todos os arquivos nos quais você está interessado (* .html) [ encontre ]
  • exiba-os com números de linha e todas as quebras de linha mudaram para algo não usado de outra forma (digamos um ControlCharacter ) , fazendo-os estar em uma linha, mas ainda " sabe " onde as linhas terminaram. [ sed ]
  • extrai todos os blocos de script e tags de wrapper [ sed .. novamente]
  • inverta a substituição da nova linha [ sed ]

.. e finalmente ..

  • grep para seus resultados [ grep ]
por 21.12.2017 / 12:56