使用 sed 在 EOF 处添加空行

Using sed to add blank line at 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

请指教

你还需要一个 \:

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.

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

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

谢谢@Enlico。我们可以在不使用正则表达式的情况下用 tee 很容易地做到这一点。

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

解决了问题

第 1 行
第 2 行

第 3 行
第 4 行