Как я могу использовать 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 

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

  • Как я могу загрузить функции этого файла скрипта, не загружая его каждый раз? «Команда не найдена» (основы Bash / scripting)
  • Чтение нескольких записей из входного файла
  • Когда bash прекратил экспорт SHELL?
  • Является ли «wait &» («wait ampersand») полезной (bash) оболочкой / shell-скриптом идиомой или техникой?
  • Как копировать и перемещать последовательное подмножество файлов?
  • Почему результаты сравнения строк всегда ложны
  • Попытка выйти из сценария с кодом состояния, но получить «неожиданный конец файла»,
  • цепочка терминальных команд, каждая из которых выполняется, если файл существует
  • 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 для сопоставления с образцом.

    Interesting Posts

    Выполнить команду для входа в общую учетную запись

    Как преобразовать мои текстовые файлы (каждый из которых содержит пару имени пользователя + пароль) в CSV, чтобы импортировать их в KeePass через bash (cygwin)

    Режим n на "iwlist wlan0 scan"

    Почему файл вывода tcpdump пуст?

    как удалить многострочную строку / блок текстового шаблона из файла?

    как удалить последние две строки с разделителями из каждой строки в большом файле

    Упаковка каталога и его содержимого в виде патча diff?

    проблемы с GNU tail -f и комбинацией команд

    Как запустить скрипт, когда заголовок установлен на вкладку терминала?

    Как перебрать нумерованные файлы, а также выходы?

    Объединение командной строки в защищенные паролем беспроводные сети в Ubuntu, Arch Linux или других дистрибутивах?

    Использование PCSCD с ошибкой ACR122U

    Установка MAC-адреса по умолчанию

    Оптимизировать команду yum

    Выполнить удаленный сценарий с локальным значением параметра

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