使用 sed 添加/删除 HTML 代码中的一些制表符和换行符

使用 sed 添加/删除 HTML 代码中的一些制表符和换行符

我想使用 sed 来细化 HTML 代码,作为使用 HTML Tidy 细化之后的额外细化过程,因为 HTML Tidy 对于某些要求来说看起来不够灵活。

我使用此命令向某些标签添加一些制表符和/或换行符,并从其他标签中删除它们:

s/<li>/\t&/g
s/\n<\/li>/<\/li>/g
  1. 除非有属性,否则第一个命令工作正常,li那么,无论它是否有属性,如何定位开始标签?
  2. 第二个命令根本不起作用。我想在这里将结束标记放在</li>上一行的末尾。

答案1

考虑这个示例文件:

$ cat sample.html 
<li a=x>Point One
</li>
<li>Point Two
</li>

我相信这个sed命令可以满足您的要求(这可能需要 GNU sed):

$ sed -Ez 's|<li\b|\t<li|g; s|\n</li\b|</li|g' sample.html
        <li a=x>Point One</li>
        <li>Point Two</li>

怎么运行的

  • -E

    使用扩展正则表达式。

  • -z

    读取以 null 分隔的数据。由于正确的 html 文件没有空字符,因此这具有一次读取整个文件的效果。

  • s|<li\b|\t<li|g

    这会在每次出现的前面放置一个制表符,<li后跟一个单词边界。

  • s|\n</li\b|</li|g

    这将替换每次出现的换行符,后跟<li单词边界<li

一种变体:<li>单独放置一条线

$ sed -Ez 's|<li[^>]*>|&\n|g; s|\n</li\b|</li|g' sample.html
<li a=x>
Point One</li>
<li>
Point Two</li>

强制性警告

html 可能很复杂,这些sed命令仅适用于简单的情况。

相关内容