Como posso grep para tags HTML quebradas?

0

Eu quero passar por todos os meus arquivos HTML e ver se tenho alguma tag errada, exemplo <br> , <hr> e assim por diante, eu quero ver quais tags não estão fechadas no arquivo HTML.

for htmlFile in 'ls -f *.html ' ; do
        if 'cat $htmlFile | grep -inE "\<br\>"' ; then
           echo "In file $htmlFile there are errors on the following lines: "  >> ~/Desktop/$1_errors.txt
           cat $htmlFile | grep -in "<br>"| cut -d ":" -f1 >> ~/Desktop/$1_errors.txt
           echo "----------------------------------------" >> ~/Desktop/$1_errors.txt
       fi
done

Mas eu recebo um erro, suspeito que seja meu regex.

./script.sh: line 14: 10:<BR: command not found

Esse é um dos erros que recebo :)

    
por gkmohit 11.06.2014 / 15:10

2 respostas

5

Seu problema (s) está nesta linha:

if 'cat $htmlFile | grep -inE "\<br\>"' ; then

Diz ao shell:

  • cat um arquivo,
  • analise e procure linhas que correspondam à tag <br>
  • executa a saída

O problema é o último passo, você não deve executar a saída do comando, mas testá-lo:

if grep -inEq "\<br\>" $htmlFile ; then

É claro que, para analisar HTML, você deve usar um analisador real, sem regexes.

    
por 11.06.2014 / 15:46
8

Mesmo que você corrija os erros na sua sintaxe de shell como a resposta da Braiam identifica corretamente, você nunca consiga que isso funcione corretamente. Na melhor das hipóteses você pode encontrar alguns erros do tipo que você sabe que você faz; mas você nunca conseguirá que o grep encontre tags quebradas do tipo que talvez você não tenha percebido que está quebrando.

Para fazer isso corretamente, é necessário usar algo que realmente analise e compreenda as tags HTML. Existem muitas ferramentas de validação de HTML por aí que podem apontar onde você quebrou a sintaxe da tag. Um dos mais comuns que você deve começar fazendo checkout é tidy . Em particular, tente executá-lo em seus arquivos com este sinalizador:

 -errors, -e         show only errors and warnings

Isso indicará onde você quebrou as tags, como coisas que não estão fechadas, como deveriam ser para obedecer ao seu tipo de documento.

Há também muitas outras opções além de fazer a verificação de sintaxe em HTML. Usar o validador do W3C é bom. Faça o que fizer, correndo o risco dos deuses do computador chovendo fogo e enxofre em você - nem tente analisar a sintaxe html com expressões regulares como grep usa para correspondência de padrões.

    
por 11.06.2014 / 15:17