1

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

1 回答 1

4

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

$ echo ~
/Users/hraban

因此,sed -i ~变得sed -i /home/you,这导致 sed 尝试重命名barbar/home/you--- 一个不存在的目录。要解决此问题,请在 bash 中转义波浪号:

$ sed -i \~ -e s/foo/hello/ bar
$ cat bar
hello
于 2017-04-16T18:24:43.960 回答