使用regex_findall过滤输出

问题描述 投票:-1回答:1

我使用正则表达式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": []
 }
regex ansible yaml
1个回答
0
投票

正则表达式”用反斜杠逃逸,当您使用双引号标量,因为这样做不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.*$') }}
© www.soinside.com 2019 - 2024. All rights reserved.