【问题标题】:How can I remove comments in a HTML with sed?如何使用 sed 删除 HTML 中的注释?
【发布时间】:2023-03-18 13:44:01
【问题描述】:

例如我有这个 html 代码

<h3>Title</h3>
<!--comment-->
<!-- comment -->
<!--
comment
-->
<h2>Title2</h2>

我必须使用 sed 来获得这个

<h3>Title</h3>
<h2>Title</h2>

我在这里找到了一些命令,但它们对我不起作用

sed '/<!--.*-->/d'

不删除这个

<!--
comment
-->

【问题讨论】:

  • You can't parse [X]HTML with regex。我建议使用 XML/HTML 解析器(例如 xmlstarlet)。
  • 如果只想输出Title所在的部分,可以使用grep。 grep Title foo.html,但我猜不仅仅是 grepping 涉及到 Tittle。
  • 当您必须使用sed(学校)时,将其添加到问题中(不仅仅是主题)。 sed -z 's#&lt;!--.*--&gt;##' 是否适用于您的示例?如果是这样,您有一个新的sed 版本,我们可以寻找更好的命令。当&lt;h2&gt; 之后出现评论时,此sed 将删除&lt;h2&gt; 行。
  • 如果只有 sed 可供您使用,并且仅适用于您的示例:sed '/&lt;!--/,/--&gt;/d' file

标签: html bash sed comments


【解决方案1】:

使用有效的 HTML/XML:

xmlstarlet ed -d '//comment()' file.html

如果要就地编辑文件,请添加选项-L

如果您的 HTML 无效,请尝试以下操作:

xmlstarlet format --recover --html file.html | xmlstarlet ed -d '//comment()'

使用xml:

xmlstarlet format --recover file.xml | xmlstarlet ed -d '//comment()'

要在输出中省略 xml 声明,请添加 --omit-decl

【讨论】:

  • 不幸的是,我只能使用 sed(用于学校)
猜你喜欢
  • 2014-11-16
  • 2019-04-23
  • 2018-07-01
  • 2014-04-21
  • 2015-10-19
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2016-09-05
相关资源
最近更新 更多