被迫对当前客户端使用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中使用除/之外的分隔符,例如#, ,等。
/
sed
#
,
find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \;
将s///括在单引号而不是双引号中也会很好,以避免变量替换或任何其他意外行为
s///
如果您使用的是OS X系统,这可能与sed命令无关。在OSX版本的sed中,-i选项需要一个extension参数,因此您的命令实际上被解析为extension参数,文件路径被解释为命令代码。
-i
extension
尝试显式添加-e参数,并将''作为参数提供给-i:
-e
''
find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \;
看到这。
你只是忘记给-i提供一个参数。只需将-i改为-i ''即可。
-i ''
当然,这意味着你不希望自己的文件被备份;否则提供你选择的扩展,如-i .bak。
-i .bak
在OS X上,没有什么能帮助糟糕的内置功能变得足够。解决方案是:
brew install gnu-sed
然后使用gsed而不是sed,这将像预期的那样工作。
只需向-i标志添加一个扩展。这基本上是用原始文件创建一个备份文件。
sed -i.bakup 's/linenumber/number/' ~/.vimrc
Sed将在没有错误的情况下执行
这不是OP的情况,但对我来说是这样的,可以帮助其他人。
如果你使用'来括住regex,请仔细检查'字符。我从字处理复制和粘贴脚本,它是在bash中粘贴'作为’。
'
’