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

请指教

解决方法

您需要另一个\

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 行

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...