我正在使用正则表达式find_all来过滤网络命令的输出,我已经使用regex101对输出进行了正则表达式测试,并且我确定它是正确的,输出也符合预期,但是当我尝试过滤时,我认为在剧本中不匹配。结果,我总是得到一个空白的味精。
- name: extract env
lineinfile:
line: "{{ env.stdout[0] }}"
dest: "{{ output_path }}/env_of_{{inventory_hostname}}.csv"
create: True
- debug:
msg: "{{ env.stdout[0] | regex_findall('^.*one minute: (\\d+%); five.*$') }}"
输出应为百分比形式的数字,但这是我得到的:
TASK [debug] ********************************************************************************************************
task path: /ansible/testcsv.yml:60
ok: [R1] => {
"msg": []
}
ok: [R2] => {
"msg": []
}
ok: [R3] => {
"msg": []
}
答案 0 :(得分:0)
Regex'使用反斜杠转义,当您使用双引号标量时,YAML也是如此。那就是在问问题和无法阅读。
您可能需要将msg
的值加倍并加反斜杠,使用单引号(在其中只能将单引号加倍而转义),或者就是迄今为止最好的解决方案,请使用YAML的块样式文字标量(适当的加粗处理):
- name: extract env
lineinfile:
line: |-
{{ env.stdout[0] }}
dest: |-
{{ output_path }}/env_of_{{inventory_hostname}}.csv
create: True
- debug:
msg: |-
{{ env.stdout[0] | regex_findall('^.*one minute: (\\d+%); five.*$') }}