我使用正则表达式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": []
}
正则表达式”用反斜杠逃逸,当您使用双引号标量,因为这样做不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.*$') }}