问题描述
此 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.
您的案例的弱点在于您将 text
与命令 a
写在同一行,这在 GNU sed 中是允许的,但在 POSIX sed 中不允许,因此领先的 { {1}} 被解释为多行脚本中 \
之后需要的反斜杠。
您的代码在使用 POSIX sed 时会出错,因为要求 a
必须在下一行 必须放在 text
之前的换行符用 text
转义。 (参考:O'Reilly's sed
& awk
by Dale Dougherty & Arnold Robbins。)
谢谢@Enlico。我们可以很容易地用 tee 做到这一点,而无需使用正则表达式。
sed '$ a\\nline3\nline4' abc.txt
解决了问题
第 1 行
第 2 行
第3行
第 4 行