【问题标题】:Remove some HTML comments in a set of files using sed/awk使用 sed/awk 删除一组文件中的一些 HTML 注释
【发布时间】:2015-10-19 18:23:21
【问题描述】:

在我的例子中,特定的文件集都包含在指定的目录及其子目录中。 我需要确保它不会删除 IE 浏览器的条件规则,例如 <!--[if IE 9]>。 这是一个示例数据集:

<!DOCTYPE html>
<!-- Should not delete the conditional below -->
<!--[if IE 9]>
<html>
<![endif]-->
<head></head>
<body>
<p>Some content</p>
<!--Single line without space-->
<!-- Single line with spaces -->
<!-- Multi
     Line
     Comment -->

<div>Content</div>
</body>
</html>

【问题讨论】:

  • 但是条件规则是 HTML cmets,所以你真的想删除 一些 HTML cmets。
  • 也许是&lt;!--[^\[].*?--&gt;
  • 如果. 不代表换行符,那么您可以将其替换为(.|\s)
  • 我们可以玩一个有趣的游戏“您发布一个您认为可以解析除条件之外的HTML cmets 的正则表达式,而我们发布它不会解析的方式”? @maraca 的方法,我反驳 &lt;a onclick='javascript:alert("&lt;!-- test --&gt;")'&gt;hello&lt;/a&gt; - 这不是评论,但会像评论一样被删除。 @Steven Penny 可能会与 foo &lt;!-- x &lt;!-- --&gt; bar --&gt; 混淆,这可能不是有效的 HTML,但 Chrome 使 bar 可见。此外,删除 cmets 可能会删除实时 JavaScript(w3schools.com/tags/tag_comment.asp - 提示和注释部分)。使用 HTML 解析器。

标签: html regex awk sed html-parsing


【解决方案1】:

这不会处理更复杂的情况,但可以帮助您入门:

#!/usr/bin/awk -f
/<!--/ {comm = 1}
comm == 0
/-->/ {comm = 0}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2019-04-23
    • 2014-11-16
    • 2023-03-18
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2016-03-28
    相关资源
    最近更新 更多