1
我正在运行旧版本的git,并且正在编写更新主机名称配置的脚本。将bd变量与bash变量混合使用
我的问题是,我无法弄清楚正确的转义字符组合,以便一个变量不与我的正则表达式中使用的反向引用混合。
这是我最大的努力
#!/bin/bash
#code
foo=`ec2-describe-instances i-f95e4b82 | grep amazon | awk '{print $4}'`
sed -i "s/\([email protected]\)\(.*\)\(:repo\.git\)/\\1 $foo \\3/" /var/www/.git/config
这使得第一反向引用和变量foo的之间的空间。希望在第一个引用和$ foo之间没有这个空格。我怀疑我可以使用文字而不是反向引用,但用户名和回购可能会改变。
任何想法?
编辑
"s/\([email protected]\)\(.*\)\(:repo\.git\)/\\1$foo\\3/"
因为foo是使用混合了与1,产生错误的反向引用不会产生正确的答案。我无法弄清楚如何逃脱$ foo。
你确定是什么问题,你认为它是什么?因为'sed'应该没有任何问题,即使在其他文本之后立即引用后面的引用,甚至包括数字。例如,'echo abc | sed's/\(a \)/ \ 12 /''打印'a2bc'。这是因为,根据POSIX规范,“sed”最多只支持9个子表达式,通过'\ 9'指向'\ 1'。 – ruakh
“s/\(ec2-user @ \)\(。* \)\(:repo \ .git \)/ \\ 1 $ foo \\ 3 /”不会产生正确答案 – Mikhail
那么,它是什么生产呢?什么'sed --version'打印? – ruakh