被迫对当前客户端使用CVS,并且更改了远程回收的地址。在本地代码中更改远程地址的唯一方法是递归搜索和替换。

然而,使用sed命令,我希望工作:

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

我得到一个错误的每个文件:

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

我尝试在sed匹配/替换中转义句点,但这并不能解决任何问题。


可能你的新域名包含/ ?如果是,尝试在sed中使用除/之外的分隔符,例如#,,等。

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

将s///用单引号括起来,而不是用双引号括起来,以避免变量替换或任何其他意想不到的行为


如果您使用的是OS X系统,这可能与sed命令无关。在OSX版本的sed中,-i选项需要一个扩展参数,因此您的命令实际上被解析为扩展参数,文件路径被解释为命令代码。

尝试显式添加-e参数,并将"作为参数给-i:

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

看到这个。


您只是忘记了为-i提供参数。把-i改成-i "

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


在OS X上,没有什么能帮助糟糕的内置功能变得足够。解决方案是:

brew install gnu-sed

然后使用gsed而不是sed,这将像预期的那样工作。


只需向-i标志添加一个扩展。这基本上是用原始文件创建一个备份文件。

sed - i。备份的/linenumber/number/ ` ~/.vimrc

Sed将在没有错误的情况下执行


这不是OP的情况,但对我来说是这样的,可以帮助其他人。

如果使用'来括起正则表达式,请仔细检查'字符。我从文字处理中复制和粘贴脚本,它在bash中粘贴“as”。