每次<p> </p>后添加换行符

时间:2012-02-24 03:36:06

标签: unix command-line sed

我有一堆没有换行的HTML。我想在任何</p>标记之后添加一个或两个换行符。

我认为这会做到,但它似乎没有添加空行:

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

4 个答案:

答案 0 :(得分:1)

我不确定这对你有用,但是有点太长(并且需要格式化)才能发表评论。您可以尝试在命令行中输入实际的换行符,方法是点击 ENTER 并加上反斜杠,告诉sed继续下一行:

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

答案 1 :(得分:0)

这不起作用,因为非GNU版本的sed不支持\n。解决这个问题的一个聪明方法是在将它提供给sed之前使用bash shell为您展开它。只要您使用sed作为翻译,这适用于bash的所有版本

$ 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 :(得分:0)

sed版本对我不起作用,我也在OS X上工作.awk工作:

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

答案 3 :(得分:0)

当您需要操纵行结尾时,请尝试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'