Ansible中如何从指定格式字符串提取两组值分别存入两个独立列表
Ansible 提取指定键值生成两个列表的实现方法
实现逻辑如下:
- 第一步:将原始多行字符串按行拆分,过滤掉所有空行
- 第二步:遍历过滤后的每行内容,筛选出等号右侧不为空的有效行
- 第三步:对有效行做字符串拆分,分别提取键名(
aaaa.和=之间的部分)和值(=右侧的部分),分别存入两个列表
你可以直接使用以下playbook实现需求:
--- - name: Extract key value to target lists hosts: localhost gather_facts: false vars: target_str: " aaaa.abc1=value1 aaaa.abc2= aaaa.def1=value2 aaaa.ddd1= " list1: [] list2: [] tasks: # 写法1:循环遍历处理,可读性更高 - name: Process string and generate lists set_fact: list1: "{{ list1 + [item.split('.')[1].split('=')[0]] }}" list2: "{{ list2 + [item.split('=')[1]] }}" loop: "{{ target_str.splitlines() | select('trim') | list }}" when: item.split('=')[1] | length > 0 # 写法2:用正则+过滤器一次性生成,执行效率更高 # - name: Generate lists with regex filter # set_fact: # valid_lines: "{{ target_str.splitlines() | select('trim') | select('search', '=.+') | list }}" # list1: "{{ valid_lines | map('regex_replace', '^aaaa\\.(.+)=.+', '\\1') | list }}" # list2: "{{ valid_lines | map('regex_replace', '^.+=(.+)', '\\1') | list }}" - name: Print result debug: msg: - "list1: {{ list1 }}" - "list2: {{ list2 }}"
运行后输出结果完全匹配要求的list1=['abc1','def1']、list2=['value1','value2']。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

