我有一个简单的字符串,我想用 XXXX 替换 Container:
<Resource name="jdbc/X1" auth="Container" type="javax.sql.DataSource"
username="yyyy" password="yyyyy"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:yyyyy/yyyyy@yyyy:yyyy/yyyy"
validationQuery="SELECT 1 from dual"/>
这是 ansible 剧本:
---
- name: "xml handler"
hosts: localhost
connection: local
tasks:
- name: Test2
debug:
msg: "hey"
- name: Replace between the expressions (requires Ansible >= 2.4)
replace:
path: /home/ec2-user/backip/foo.xml
after: 'Resource name="jdbc\/X1"'
before: '\/>'
regexp: 'auth="(.*?)"'
replace: 'XXXX\1'
- name: Test2
debug:
msg: "bye"
但我得到的只是:
<Resource name="jdbc/X1" XXXX Container type="javax.sql.DataSource"
username="yyyy" password="yyyyy"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:yyyyy/yyyyy@yyyy:yyyy/yyyy"
validationQuery="SELECT 1 from dual"/>
这个简单的正则表达式有什么问题?
预期输出是:
<Resource name="jdbc/X1" auth="XXXX" type="javax.sql.DataSource"
您可以尝试将替换模式分成两部分:
regexp: '(auth=")(?:.*?)(")'
replace: '\1XXXX\2'
这样输出是正确的:
<Resource name="jdbc/X1" auth="XXXX" type="javax.sql.DataSource"
在你实际的正则表达式中
auth="(.*?)"
:
\1
匹配“容器”XXXX\1
给出“XXXXContainer”您的正则表达式:https://regex101.com/r/Ln7Aca/1
修改后的一个(输出正确):https://regex101.com/r/Qb2grI/1