Shellscript 删除 HTML 文件中的特定标签

Shellscript 删除 HTML 文件中的特定标签

有人可以指导我编写针对以下场景的 Shell 脚本命令吗?

我有一个 html 文件,所有标签都在一行中,如下所示,

<html><head></head><body><br><center><h2 style='display: block;font-size: 1.5em;weight: bold;'>Validation Report</h2></center></body><table style='border:1px solid;border-collapse: separate;border-spacing: 2px;border-color: gray;' align='center'width='85%' cellpadding ='4' cellspacing='1' bgcolor='#CFCFCF' ><tr style='background-color:#a6caf0;height:30px;font-size:12px;'><th style='width:467px;border: 1px solid;'>TestCaseID</th><th style='border: 1px solid;'>Severity</th><th style='width:125px;border: 1px solid;'>Result</th><th style='width:148px;border: 1px solid;'>Remark</th><tr style='background-color:#ebf3fc;' align='center'><td style='width:360px;border: 1px solid;'>TESTCASE-001</td><td style='width:360px;border: 1px solid;'>Critical</td><td style='width:125px;border: 1px solid;'>Error</td><td style='width:125px;border: 1px solid;'>None</td></tr><tr style='background-color:#ebf3fc;' align='center'><td style='width:360px;border: 1px solid;'>TESTCASE-002</td><td style='width:360px;border: 1px solid;'>Critical</td><td style='width:125px;border: 1px solid;'>Error</td><td style='width:125px;border: 1px solid;'>None</td></tr></table></body></html>

在浏览器中查看该文件时,将显示一个表格,其中包含测试用例 ID、其相应的严重性、结果和备注的条目。该 HTML 文件共有 210 个 TestcaseID。现在我必须通过提及 TestcaseID 来删除表中的特定行。 (比如说,我需要删除具有 TESTCASE-002 的行)

答案1

不要使用像 sed/grep 这样的文本处理工具,而是使用能够理解 HTML 的工具。

例如,在xsh, 你可以

open :F html file.html ;
delete //tr[td='TESTCASE-002'] ;
save :b ;

不过,您必须首先修复该文件 - 删除放错位置的标签</body></head>结束标签。

答案2

您可以使用以下命令删除标签XSL 转换(XSLT)。

大多数发行版应该附带一个xsltproc命令(包的一部分libxslt)。

以下是执行转换的命令,可在 shell 脚本中使用:

xsltproc --html main.xslt index.html

这是将删除的 XSLT测试用例-002:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes"/>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="tr[td = 'TESTCASE-002']"/>
</xsl:stylesheet>

这种方法的优点是它是声明性的、可重用的,并将处理 XML/HTML 的代码与 shell 脚本的其余部分分开。它还灵活且功能强大。缺点是有点冗长和麻烦。

此方法还可以处理格式不正确的 HTML。

答案3

该字符串将拉出 html 块中的第一个条目

awk -F"TESTCASE-" '{print $2}' test.html |sed -e 's/<[^>]*>/ /g'

这将拉出第二个

awk -F"TESTCASE-" '{print $3}' test.html |sed -e 's/<[^>]*>/ /g'

如果您将 -v 选项与 awk 一起使用,您可以传递 bash 变量并提取您需要的任何块。

相关内容