sed - 使用 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
与 command 写在同一行上a
,这在 GNU sed 中是允许的,但在 POSIX sed 中是不允许的,因此前导被解释为多行脚本\
中所需的反斜杠a
.
您的代码会在 POSIX sed 中出错,因为它要求text
必须在下一行,并且必须在之前放置的换行符text
必须用\
. (参考:O'Reilly's sed
&awk
by Dale Dougherty & Arnold Robbins。)
推荐阅读
- git - 如何暂时“搁置”(或 git 中的等价物)POC 并开始研究更重要的功能
- awk - 从行中删除前 4 个空格
- r - 计算事先不知道长度的向量 - 我应该“增长”它吗?
- c# - OData 控制器不返回实体
- node.js - MongoDB 无法等待结果
- label - Zebra ZPL 脚本的水平文本
- angular - 无法使用角度 2+ 获取模板参考值
- security - HDP KYLO 沙箱中的 Kylo 安全实现?
- android - 如何检查设备上是否安装了 WhatsApp?
- wso2 - 具有外部 GLUU OpenId Connect IDP 的 WSO2 身份服务器 - 身份验证方法 client_secret_basic 与 client_secret_post