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
在我的 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