Linux MacOS 里执行 sed 命令报错

doladola · 2020年11月06日 · 最后由 wing 回复于 2020年11月18日 · 3947 次阅读

请教各位 mac 中执行下面第一句命令报错,是什么原因呀,搜索结果中说是应为 mac os 会强制备份 sed 的命令文件,所以又尝试在前面加空字符串仍旧没有效果,请教是什么原因呀?MacOS 中如何才能执行这句命令呢?
第一句:
sed '4 a newline' 1.txt
报错为:
sed: 1: "4 a newline": command a expects \ followed by text

第二句:
sed '' '4 a newline' 1.txt
没有报错了,但是也没有显示出增加一条

$ cat 1.txt
AA1aa
bb2bb
cc3cc
dd4dd
$ sed '' '4 a newline' 1.txt
sed: 4 a newline: No such file or directory
AA1aa
bb2bb
cc3cc
dd4dd
共收到 7 条回复 时间 点赞

xx@xx MINGW64 /d/temp
$ cat testSed.txt
AA1aa
bb2bb
cc3cc
dd4dd

xx@xx MINGW64 /d/temp
$ sed '4i\ aaaa new line' testSed.txt
AA1aa
bb2bb
cc3cc
aaaa new line
dd4dd

Jacky 回复

输入同样的命令结果报错了:

$ sed '4i\ aaaa new line' 1.txt
sed: 1: "4i\ aaaa new line": extra characters after \ at the end of i command

ps:是否和 mac os 系统内置的 bash 有关呢,我自己再查查看,感谢回复

最好不要用 macOS,很多命令跟 Linux 有差别

Mac 属于 BSD 系列,命令参数跟 GNU/linux 会有些差异,如果你想一样,可以替换掉:
brew install coreutils

doladola 回复

我是在 linux 下调试的,你可以试试换成双引号。
mac 和 linux 的 bash 会有细微的差异,我也记不清了,手头也没有 mac 了

sed -i '' '1 a\
a new line' 1.txt 

a\ 后面按下回车键换行

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册