Ruby wiki 指南 sed 这一步出错 (mac)(解决,谢谢,建议改一下 wiki)

chenge · 2012年12月19日 · 最后由 Jake019 回复于 2013年03月01日 · 5500 次阅读

$ sed -i 's/ftp.ruby-lang.org\/pub\/ruby/ruby.taobao.org\/mirrors\/ruby/g' ~/.rvm/config/db

sed: 1: "/Users/gregchen/.rvm/co ...": extra characters at the end of g command

什么情况?mac 上的,各位麻烦给看看。

看提示是说你命令里打了多余的字符吧,不知道你的命令输入的是否正确?我复查了 wiki 上的命令,没有错误,不如你复制粘贴一下试试吧,肯定是你输入的问题。

另外,这个命令无非就是替换了~/.rvm/config/db这个文件里所有http://ftp.ruby-lang.org/pub/ruby的字符串,换成了http://ruby.taobao.org/mirrors/ruby,实在不行就找个编辑器手动去替换一下好了,没什么难的。

我是复制的,没看出什么问题,有点奇怪。

?

sed -i .bak 's/ftp.ruby-lang.org\/pub\/ruby/ruby.taobao.org\/mirrors\/ruby/g' ~/.rvm/config/db

wiki 里不是有个 -e 参数么你怎么没加..

#3 楼 @luikore 你的命令似乎是对了。什么-e 参数,没看见哦。

在脚本前面加 -e 好像不是必须的,不过这个我也不是太确定。加上为好...

再就是 -i 功能,BSD 系统实现的 sed (也就是 OSX 所使用的 sed) 要求 -i 的后面必须加备份文件的扩展名,比如 #3 楼 用的 .bak

-e 的功能是什么,没看懂。

我是怀疑 sed 版本,有必要把 wiki 修改一下。

#6 楼 @chenge 在命令行运行 man sed 就可以看到各个参数的意义。

#7 楼 @5long 我搜索了,明白那个 e 的意思了。单个命令应该不需要这个参数吧。

#8 楼 @chenge 我知道问题出在哪里了,非常有意思。

你说的-e参数不是必须的,这的确没错。但为什么你不加就失败了呢?这是因为如同#5 楼所讲:BSD 系统实现的 sed 需要在-i参数后指定备份文件的扩展名。

于是,在 Mac 下当你写上-e的时候,事实上并没有真的调用-e参数,而是指定了一个叫做-e的扩展名(奇葩的命令……),这样就满足了-i的要求,于是命令就成功了;你不写,-i参数找不到必选项,命令失败。

经过测试,结果的确如此,在我的~/.rvm/config目录下,多了一个db-e的文件,这应该就是备份文件了。

bsd 的 find, sed 都和 Linux 有些不一致的地方

今天就修改一下 Wiki

#11 楼 @huacnlee 谢谢维护,辛苦了。

@nightire @chenge @huacnlee

依然出错 sed -i .bak 's!ftp.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db 错误: sed: -e 表达式 #1, 字符 1: 未知的命令:“.”↵

不懂 linux,请指教。

#13 楼 @Nori -i.bak 中间不能有空格,也可以写成 --in-place=.bak. 具体的规则可以看 man sed.

#14 楼 @5long 谢谢,Wiki 里有空格😓

@huacnlee 14 楼说的对,wiki 中此命令,的确多了个空格。请改一下。

sed -i.bak 's!ftp.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db

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