Mac OSX系统Shell中sed命令换行符\n失效问题咨询
解决macOS下sed插入内容时换行符不生效的问题
我之前也踩过这个坑!你遇到的问题根源在于macOS自带的是BSD版本的sed,和Linux系统里的GNU sed语法有差异,尤其是处理换行符的逻辑不一样——你的原命令里的\n并没有被BSD sed解析成换行,而是直接当成普通字符输出了。
下面给你两种可行的解决办法:
方法1:直接在命令中输入实际换行
BSD sed要求i\后面必须紧跟一个真实的换行,再写要插入的内容。你可以这样写:
sed -i '' '3i\ Line to add in csv ' data.csv
注意细节:
3i\这一行的结尾不能加任何多余字符,直接按回车换行- 第二行写你要插入的目标内容
- 最后一行的单引号可以单独占一行,这样写法更清晰
方法2:利用Shell的ANSI-C转义解析换行
如果你不想手动敲换行,可以用Shell的$'...'语法让系统自动把\n解析成实际换行,不过需要对\做转义处理:
sed -i '' $'3i\\\nLine to add in csv' data.csv
这里的$'3i\\\n'会被Shell解析成3i\加上一个真实的换行,这样BSD sed就能正确识别插入操作了。
补充一句:如果是在Linux系统用GNU sed,你原来的命令其实是有效的,但macOS的BSD sed对语法要求更严格,所以得调整写法~
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

