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

Ansible 2.9.27:单循环实现多模式正则匹配(支持空格字符串)

Ansible多模式匹配含空格列表项的解决方案(2.9.27版本)

问题根源

你之前的实现报错,是因为直接在with_items中结合regex_search时,带空格的列表项会被模板解析器误拆分为多个参数,导致循环逻辑出错。改用select过滤器配合regex_search可以从列表层面做筛选,避免这个问题。

实现代码

---
- name: 实现类似EGREP的多模式匹配(支持含空格项)
  hosts: localhost
  gather_facts: false
  vars:
    # 待匹配的目标列表(包含带空格的项)
    target_items:
      - "web server log 2024"
      - "db backup_01"
      - "api request failed"
      - "normal task"
      - "db backup_05"
    # 多模式正则规则:用|分隔,支持带空格的匹配规则
    match_rules: "web server|db backup_[0-9]|request failed"
  tasks:
    - name: 筛选符合规则的项
      debug:
        msg: "{{ item }}"
      loop: "{{ target_items | select('regex_search', match_rules) | list }}"

关键说明

  1. 过滤器组合逻辑:

    • select('regex_search', match_rules)会遍历列表中的每个项,只要项中包含match_rules里任意一个正则模式,就会被保留。
    • 最后用list把筛选后的迭代器转为列表,适配loop(2.9版本中loop和with_items都支持)。
  2. 正则规则编写:

    • 多模式用|分隔,和EGREP的多模式语法一致。
    • 如果规则包含正则特殊字符(如.、*、?),需要用反斜杠转义,比如要匹配file.log,需写成file\.log。
    • 若规则是动态生成的,可以先定义规则列表再拼接:
      match_rule_list:
        - "web server"
        - "db backup_[0-9]"
        - "request failed"
      match_rules: "{{ match_rule_list | join('|') }}"
      
  3. 精确匹配选项:
    如果需要像egrep -x那样整行完全匹配,把regex_search换成regex_match即可。

内容的提问来源于stack exchange,提问作者AKS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:40:18