被迫对当前客户端使用CVS,并且更改了远程回收的地址。在本地代码中更改远程地址的唯一方法是递归搜索和替换。
然而,使用sed命令,我希望工作:
find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;
我得到一个错误的每个文件:
sed: 1: ".//file/path ...": invalid command code .
我尝试在sed匹配/替换中转义句点,但这并不能解决任何问题。
被迫对当前客户端使用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上,没有什么能帮助糟糕的内置功能变得足够。解决方案是:
brew install gnu-sed
然后使用gsed而不是sed,这将像预期的那样工作。
只需向-i标志添加一个扩展。这基本上是用原始文件创建一个备份文件。
sed - i。备份的/linenumber/number/ ` ~/.vimrc
Sed将在没有错误的情况下执行
这不是OP的情况,但对我来说是这样的,可以帮助其他人。
如果使用'来括起正则表达式,请仔细检查'字符。我从文字处理中复制和粘贴脚本,它在bash中粘贴“as”。
您只是忘记了为-i提供参数。把-i改成-i "
当然,这意味着你不希望自己的文件被备份;否则,提供您选择的扩展名,如-i .bak。
如果您使用的是OS X系统,这可能与sed命令无关。在OSX版本的sed中,-i选项需要一个扩展参数,因此您的命令实际上被解析为扩展参数,文件路径被解释为命令代码。
尝试显式添加-e参数,并将"作为参数给-i:
find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \;
看到这个。