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

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

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 для сопоставления с образцом.

  • Найдите полный путь и имя файла под каталогом, затем перейдите в исполняемый файл в качестве аргументов
  • Скрипт для загрузки ЦП отдельных ядер
  • Добавление backtick (`) в вывод heredoc в команде оболочки
  • Написание сценария установки для CentOS
  • Как я могу распечатать полное объявление функции любой функции, которая содержит в себе определенную строку?
  • Отправить команду в оболочку через Makefile
  • / bin / etc / lib64 / root / sbin удалены или перемещены папкой mv / * / *, в то время как su
  • Параллелизация sed дает разную производительность
  • Добавить файлы с одним слоем bash?
  • `tar` с` find` с удалением исходного расширения файла
  • Как подключить вывод к sh скрипту и передать его команде?
  • Разделить разделенный запятыми список, игнорирующий запятые в соответствии с {}
  • Interesting Posts

    twm (Tab Window Manager): отключение клавиатуры

    Как перенести все страницы памяти процесса с одного узла NUMA на другой узел NUMA?

    Вывод команды подстановки grepping ls вызывает ошибку

    Создавать журнал истории для рабочего каталога в bash

    dhcpd не разрешает параметр имени файла с двоеточием в нем

    Является ли dockerfile yum использующим репозитории yum хоста?

    Что представляет собой стандартная программа (ы) CLI для управления пользователями и группами?

    Как определить пользователя и группу для каталогов внутри и RPM с помощью FPM?

    Как сделать загрузочный Debian USB на Mac?

    Может ли работать с регулярным выражением?

    В сценарии Nexenta bash используется / usr / sun / bin / sed вместо / usr / bin / sed

    Связывание «..» происходит где-то, кроме родительского каталога и других странных fs beharviors

    Программный центр немедленно сработает с KeyError: «CODENAME» на elementaryOS Luna

    объединение файлов в один фрейм данных

    Как исправить `. имя файла "надежно?

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