基于这个例子:
Run Code Online (Sandbox Code Playgroud)- 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
Run Code Online (Sandbox Code Playgroud)
/路径/到/文件:
helloworld
Run Code Online (Sandbox Code Playgroud)
Ansible 片段:
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line='\1030'
Run Code Online (Sandbox Code Playgroud)
尝试 2
- lineinfile:
dest: /path/to/file
regexp='^(hello)world$'
line="\1030"
Run Code Online (Sandbox Code Playgroud)
预期结果:
hello030
Run Code Online (Sandbox Code Playgroud)
当前结果:
\1030
Run Code Online (Sandbox Code Playgroud)
问题
\1030
而不是hello030
?jsc*_*ott 11
为什么结果是 \1030 而不是 hello030?
lineinfile 模块默认为backrefs: false
. 您regexp='^(hello)world$'
匹配file的全部内容。文字 fromline='\1030'
替换内容。
如何解决?
backrefs: true
line:
后跟数字的 backref 不会按预期运行。您将需要一个命名组。例如\g<1>
- name: Replace the world
lineinfile:
dest: file
regexp: '^(hello)world$'
line: '\g<1>030'
backrefs: true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14873 次 |
最近记录: |