在Mac上,sed命令无法工作

7

在我使用的 Lion Mac 上,以下 sed 命令无法工作。

find . -type f -exec sed -i 's/user_dashboard/user/g' {} \;

我遇到了这个错误。
sed: 1: "./vendor/assets/javascr ...": invalid command code .

1
如果您正在使用OSx操作系统,则需要使用sed -i ""命令来原地重命名文件。祝您好运。 - shellter
“-i” 在你使用的情况下是 GNU “sed” 的一个特性。 - FatalError
@shellter:没错。你应该将它提交为答案,这样你就可以得到积分。 - Gordon Davisson
3个回答

25

OSX版本的sed与大多数Linux系统中的版本不同。

它将-i选项扩展为让您有机会使用不同的扩展名保存文件,但需要输入该扩展名。

如果您只想直接覆盖文件,您需要使用sed -i "" ...sedCmd.... fileName在原地重命名您的文件。

根据@JamesMcMahon的评论,在此处查看OSX/BSD sed的完整文档

希望这可以帮助您。


3
这个回答应该被标记为答案! - Florian Neumann

6

-i 在您使用的版本的 sed 中可能有不同的含义(不是“原地”)。如果可用,尝试使用 gsed,或者将 -i 替换为 -e 并使用临时文件(然后使用 mv)来模拟它。


1
在Mac上安装gsed的简单方法是通过homebrew - James McMahon
使用 MacPorts 安装:sudo port install gsed - Boy Baukema

3

在Mac上使用sed动态替换文件中的文本是可行的,

只是命令略有不同。

使用:-i,您需要指定一个后缀,sed会在修改完成后将原始文件保存为该后缀。

运行命令如下:

$ sed -i _backup -E 's/foo/bar/' /tmp/jestinkt.txt

在经过修改后,以及原始文件 /tmp/jestinkt.txt_backup 的同时结束


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接