如何 grep 查找损坏的 HTML 标签?

如何 grep 查找损坏的 HTML 标签?

我想 grep 遍历所有 HTML 文件,看看那里是否有任何错误标签,例如 example等等,这就是我想查看 HTML 文件中哪些标签未关闭<br><hr>

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

这是我得到的错误之一:)

答案1

即使您将 shell 语法中的错误修复为布雷亚姆的回答正确识别,你会绝不让这个真正发挥作用。最好的情况下,你可能会发现一些你知道自己会犯的错误;但是你永远不会让 grep 可靠地找到你可能没有注意到你正在破坏的那种破坏的标签。

为了正确地做到这一点,您需要使用能够真正解析和理解 HTML 标签的东西。有很多 HTML 验证工具可以指出标签语法的问题。您应该首先检查的最常见的情况之一是tidy。特别是尝试使用此标志在您的文件上运行它:

 -errors, -e         show only errors and warnings

这将指出您在哪里有损坏的标签,例如没有按照您的文档类型应有的方式关闭的内容。

除了 tidy 之外,还有很多其他选项可以对 HTML 进行语法检查。使用W3C 验证器是一个很好的。无论你做什么——都要冒着计算机之神的风险烈火与硫磺倾泻在你身上—甚至不要尝试使用正则表达式来解析 html 语法,例如 grep 用于模式匹配的正则表达式。

答案2

您的问题在这一行:

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

它告诉 shell:

  • 猫一个文件,
  • 解析它并查找与<br>标签匹配的行,
  • 执行输出

问题是最后一步,您不应该执行命令的输出,而应该测试它:

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

当然,要解析 HTML,您应该使用真正的解析器,而不是正则表达式。

相关内容