You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:06:03