我正在尝试localhost
在字符串中替换
$amp_conf['AMPDBHOST'] = 'localhost';
与变量的内容{{ asterisk_db_host }}
,即172.17.0.3
.
虽然
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1\2'
完美地导致
$amp_conf['AMPDBHOST'] = 'localhost';
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1{{ asterisk_db_host }}\2'
也
- replace:
dest: /usr/src/freepbx/installlib/installcommand.class.php
regexp: '(\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)'
replace: '\1{{ asterisk_db_host|regex_escape() }}\2'
O2.17.0.2';
用or替换字符串O2\.17\.0\.2';
。
我在这里做错了什么?我怎样才能正确地进行这种更换?
您的替换字符串如下所示:
在 Jinja 模板化之后,这实际上被用作正则表达式模块中的替换字符串:
看看第一个术语。它不再
\1
是现在\1172
,这显然是错误的。解决这个问题的一种方法是在替换的值部分周围加上引号(因为当你这样做时,会有一个非数字字符 - 引号 - 将你的反向引用与模板扩展的值分开)。这是一个选项:这使用了 YAML 块引用 (
>-
),因此我们无需担心表达式中的引号转义,而且在我的简单测试中它似乎做了正确的事情。另一种解决方案是使用命名组:
灵感来自http://www.handverdrahtet.org/2016/01/ansible-using-numbered-backreference.html