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.