首页 > 解决方案 > 使用 sed 在 EOF 处添加空行

问题描述

此 sed 命令将 2 行附加到abc.txt

sed '$ aline3\nline4' abc.txt

line 1
line 2
line 3
line 4

但想在像这样添加 2 行之前添加一个空行

line 1
line 2

line 3
line 4

如此尝试

sed '$ a\nline3\nline4' abc.txt

反而得到了

line 1
line 2
nline 3
line 4

请指教

标签: sedescapingline-breaks

解决方案


你需要另一个\

printf 'line1\nline2' | sed '$ a\\nline3\nline4'

它适用于 GNU sed 4.8。

您查看man sed并在其中搜索Append,第一个结果显示

       a \

       text   Append text, which has each embedded newline preceded by a backslash.

您的案例的弱点在于您text与 command 写在同一行上a,这在 GNU sed 中是允许的,但在 POSIX sed 中是不允许的,因此前导被解释为多行脚本\中所需的反斜杠a.

您的代码会在 POSIX sed 中出错,因为它要求text必须在下一行,并且必须在之前放置的换行符text必须用\. (参考:O'Reilly's sed&awk by Dale Dougherty & Arnold Robbins。)


推荐阅读