【问题标题】:Add line break after every </p>在每个</p>之后添加换行符
【发布时间】:2012-03-14 13:33:30
【问题描述】:

我有一堆没有换行符的 html。我想在任何&lt;/p&gt; 标记后添加一两个换行符。

我认为这样做可以,但它似乎没有添加空行:

echo "<p>first line of text</p><p>second line of text</p>" | sed 's:</p>:</p>\n:g' > file.html

【问题讨论】:

  • 你只是想美化 HTML 吗?一个快速的谷歌搜索给出了这个,看看它是如何为你工作的:digitalcoding.com/tools/html-beautifier.html
  • 使用sed,发布操作系统和/或版本总是有帮助的!
  • @Dan Fego - 在 Mac 上的 bash shell 中。无法弄清楚如何获得 sed 的版本号...试过 -v,--version 和 man sed 也没有给出任何提示。
  • @minitech - 只需要添加几行以方便我自己阅读...仅此而已...谢谢。

标签: unix command-line sed


【解决方案1】:

这不起作用,因为 sed 的非 GNU 版本不支持 \n。解决此问题的一个聪明方法是使用bash shell 为您扩展它,然后再将其提供给 sed。只要您使用bash 作为解释器,这应该适用于所有版本的sed

$ sed $'s:</p>:&\\\n:g' <<<'<p>first line of text</p><p>second line of text</p>'
<p>first line of text</p>
<p>second line of text</p>

【讨论】:

    【解决方案2】:

    我不确定这是否适合您,但它有点太长(并且需要格式化)来发表评论。您可以尝试在命令行中输入一个实际的换行符,方法是按 ENTER 并输入一个反斜杠,以告诉 sed 继续下一行:

    echo "<p>first line of text</p><p>second line of text</p>" | sed 's:</p>:</p>\
    :g' > file.html
    

    【讨论】:

      【解决方案3】:

      sed 版本不适合我,我也在 OS X 上。awk 工作:

      echo "<p>first line of text</p><p>second line of text</p>" | 
      awk '{gsub(/<\/p>/,"</p>\n");print $0;}'
      

      【讨论】:

        【解决方案4】:

        当您需要处理行尾时,请尝试使用 perl 而不是 sed。像这样一个简单的sed 脚本可以逐字转移到perl -pe,它会神奇地开始工作:

        echo "<p>first line of text</p><p>second line of text</p>" | perl -pe 's:</p>:</p>\n:g'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-18
          • 2019-03-17
          • 2020-06-10
          • 2011-02-27
          • 2016-02-01
          • 2014-03-01
          • 1970-01-01
          相关资源
          最近更新 更多