ansible - 用正则表达式替换在 Ansible 中不起作用(替换)
问题描述
我是一个新手,Ansible
我正在尝试编写一个剧本来检查一行,如果它没有被注释掉,那就去做。这是我要注释掉的行//
:
$data['refresh_timeout'] = $data['Timeout'];
我检查了 regex101.com 中的搜索语法,regexp
似乎工作正常。看来我的问题出在replace
. 这是我的代码:
replace:
path: /var/www/html/application/controllers/welcome.php
regexp: r'^\s+(\$data\[\'refresh_timeout\'\].*)$'
replace: r'^\s+// (\$data\[\'refresh_timeout\'\]\1'
我一直在2台服务器上进行测试,在mytest-server2
该行已经被注释掉,但在执行时ansible
不修改文件mytest-server1
(没有注释的行)。这就是我所拥有的:
`TASK [Gathering Facts]************************************************
task path: /home/myself/ansible/wui_refresh.yml:5
ok: [mytest-server2]
ok: [mytest-server1]
META: ran handlers`
`TASK [Check whether /welcome.php contains "// $data['refresh_timeout']"] *****
task path: /home/myself/ansible/wui_refresh.yml:23
ok: [mytest-server1] => {"changed": false, "msg": ""}
ok: [mytest-server2] => {"changed": false, "msg": ""}
META: ran handlers
META: ran handlers`
`PLAY RECAP ***************************************************************
mytest-server2 : ok=2 changed=0 unreachable=0 failed=0
mytest-server1 : ok=2 changed=0 unreachable=0 failed=0`
提前感谢您的帮助
解决方案
下面的任务完成了这项工作
- replace:
path: /var/www/html/application/controllers/welcome.php
regexp: '^\$data\[''refresh_timeout''\] = \$data\[''Timeout''\];'
replace: '//$data[''refresh_timeout''] = $data[''Timeout''];'
前
$ cat welcome.php
$data['refresh_timeout'] = $data['Timeout'];
后
$ cat welcome.php
//$data['refresh_timeout'] = $data['Timeout'];
笔记
- 单引号样式用于regexp和replace。单引号必须转义 ('')。
- regexp使用 Python 正则表达式。特殊字符必须转义(\$ ...)
- 如果行首有一个或多个空格regexp必须以 '^\s+
推荐阅读
- amazon-web-services - AWS - 无法访问 S3 存储桶
- javascript - 获取用户的位置,然后使用 GeolocateControl 地图框以一个端点作为用户的位置显示方向
- sql - 尽管引用了表,但列名不明确
- deno - `Deno.env` 从哪里获取数据?
- javascript - Javascript变量未实例化
- node.js - Shopiy-API-Node - 获取智能收藏元字段
- ios - 调整图像的高度以适应屏幕(保持纵横比)并使其余部分以编程方式水平滚动
- azure-devops - Azure Devops SendEmail 任务未找到附件
- airflow - 当 schedule_interval=None 时,下游 DAG 任务不运行
- opengl - 为什么 glsl 变量没有按预期工作?