无效的命令代码,尽pipe逃脱了,使用sed

被迫为当前客户端使用CVS,并且远程仓库的地址被更改。 我可以find更改我的本地代码中的远程地址的唯一方法是recursionsearch和replace。

但是,我希望使用sed命令:

find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;

我得到每个文件的错误:

sed: 1: ".//file/path ...": invalid command code .

我试图摆脱sed比赛/replace期间,但是这并没有解决任何问题。

如果你在OS X上,这可能与sed命令无关。 在sed的OSX版本中, -i选项需要一个extension参数,所以您的命令实际上被parsing为extension参数,文件path被解释为命令代码。

尝试显式地添加-e参数并给''作为参数到-i

 find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \; 

看到这个

你只是忘了给-i提供一个参数。 只要把-i改成-i -i ''

当然,这意味着你不希望你的文件被备份; 否则提供您select的扩展,如-i .bak

可能你的新域名包含/ ? 如果是这样,请尝试使用除/以外的分隔符,例如# ,等等

 find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \; 

用单引号而不是双引号括起s///也是好事,以避免variablesreplace或任何其他意外的行为