基于这个例子:
- lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' backrefs=yes
从此文档中,尝试在 Ansible 中进行正则表达式替换。
Ansible 版本
user@server:/home$ ansible --version
ansible 2.1.1.0
/路径/到/文件:
helloworld
Ansible 片段:
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line='\1030'
尝试 2
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line="\1030"
预期结果:
hello030
目前的结果:
\1030
问题
- 为什么结果
\1030
不是hello030
? - 如何解决?
lineinfile 模块默认为
backrefs: false
. 您匹配fileregexp='^(hello)world$'
的全部内容。文字 from替换内容。line='\1030'
backrefs: true
line:
后跟数字的 backref 将无法按预期运行。您将需要一个命名组。例如
\g<1>
我想这是因为它匹配整个 \1030(作为第 1030 个反向引用)。也许先尝试\1 030,你会看到,如果是这个原因。