OSX 上的 sed -i 备份字符不能使用波浪号 (~):"sed: rename(): Not a directory"

Can't use tilde (~) for sed -i backup character on OSX: "sed: rename(): Not a directory"

在我的 OSX 机器上,我不能使用 ~ 作为就地 sed 的备份字符。任何其他角色都可以。我得到的错误是......神秘:rename(): Not a directory.

示例:

$ echo foo > bar
$ sed -i ~ -e s/foo/hello/ bar
sed: rename(): Not a directory
$ ls -1
bar
$ cat bar
foo
$ sed -i _ -e s/foo/hello/ bar
$ ls -1
bar
bar_
$ cat bar
hello
$ cat bar_
foo

Bash 自动将独立波浪号 (~) 扩展为 $HOME:

$ echo ~
/Users/hraban

因此,sed -i ~ 变为 sed -i /home/you,这导致 sed 尝试 将 bar 重命名为 bar/home/you---一个不存在的目录。要解决这个问题, 在 bash:

中转义波浪号
$ sed -i \~ -e s/foo/hello/ bar
$ cat bar
hello