使用 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 行
此 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 行