Как я могу использовать grep для разбитых HTML-тегов?

Я хочу, чтобы grep через все мои HTML-файлы и посмотреть, есть ли там какие-либо плохие теги, например, <hr> , <hr> и т. Д., То есть я хочу посмотреть, какие теги не закрываются в файле 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 

Но я получаю сообщение об ошибке, я подозреваю его мое регулярное выражение.

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

Это одна из ошибок, которые я получаю 🙂

  • Как использовать If-Else для выполнения определенных действий, если дни недели - это дни?
  • Монетный двор Linux: сделать «общедоступную интерактивную пусковую установку» только из корня sh?
  • оболочка неожиданный конец ошибки файла
  • -bash: невозможно создать временный файл для здесь-документа: на устройстве нет места
  • Блок условного исполнения с || и круглые скобки
  • shell script - вычесть 1 из шестнадцатеричного MAC-адреса и добавить двоеточие к нему
  • Занятое поле Прочитайте файл по строкам
  • Параметр игнорируется при цитировании
  • 2 Solutions collect form web for “Как я могу использовать grep для разбитых HTML-тегов?”

    Ваша проблема (ы) находится в этой строке:

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

    Это говорит оболочке:

    • cat файл,
    • проанализируйте его и найдите строки, соответствующие тегу <br> ,
    • выполнить вывод

    Проблема заключается в последнем шаге, вы не должны выполнять вывод команды, но протестируйте ее:

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

    Разумеется, для анализа HTML вы должны использовать настоящий парсер, без регулярных выражений.

    Даже если вы исправите ошибки в синтаксисе своей оболочки, так как ответ Брайама правильно идентифицирует, вы никогда не получите этого, чтобы действительно работать правильно. В лучшем случае вы можете найти несколько ошибок, которые вы знаете, что вы делаете; но вы никогда не получите grep, чтобы надежно найти сломанные теги, которые вы, возможно, уже не заметили, что вы нарушаете.

    Чтобы сделать это правильно, вам нужно использовать что-то, что на самом деле анализирует и понимает HTML-теги. Существует множество инструментов проверки HTML, которые могут указывать на то, где вы нарушили синтаксис тегов. Один из наиболее распространенных, который вы должны начать с проверки, является tidy . В частности, попробуйте запустить его в своих файлах с помощью этого флага:

      -errors, -e show only errors and warnings 

    Это укажет на то, где вы нарушили теги, такие как вещи, которые не закрыты, как они должны соответствовать вашему doctype.

    Есть также множество других опций, кроме аккуратного для проверки синтаксиса HTML. Использование валидатора W3C является хорошим. Независимо от того, что вы делаете – рискуя, что компьютерные боги проливают огонь и серу на вас, даже не пытайтесь разобрать синтаксис html с регулярными выражениями, такими как использование grep для сопоставления с образцом.

    Linux и Unix - лучшая ОС в мире.