1

我正在运行旧版本的 git,并且正在编写一个更新主机名配置的脚本。

我的问题是我无法找出正确的转义字符组合,因此变量不会与我的正则表达式中使用的反向引用混合。

这是我最大的努力

#!/bin/bash
#code
foo=`ec2-describe-instances i-f95e4b82 | grep amazon | awk '{print $4}'`
sed -i "s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1 $foo \\3/" /var/www/.git/config

这在第一个反向引用和变量 foo 之间放置了一个空格。希望在第一个反向引用和 $foo 之间没有那个空间。我怀疑我可以使用文字而不是反向引用,但用户名和存储库可能会改变。

有任何想法吗?

编辑

"s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1$foo\\3/"

不会产生正确的答案,因为 foo 与 1 合并,产生错误的反向引用。我不知道如何逃脱 $foo。

4

1 回答 1

0

您需要隔离$foo变量,这样您就不需要在其周围使用空格来将其名称与周围的其他字符区分开来。尝试

sed -i "s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1${foo}\\3/" /var/www/.git/config

如果您只想要 foo 之后的空格,请使用

sed -i "s/\(ec2-user@\)\(.*\)\(:repo\.git\)/\\1${foo} \\3/" /var/www/.git/config

IHTH

于 2012-08-28T02:38:12.043 回答