首页 > 解决方案 > 在ansible中用多个值替换多个模式

问题描述

regex_replace在ansible中使用过滤器。我可以让它工作,但它真的很麻烦。这就是我正在做的

- set_fact:
    variable: "{{ value | regex_replace("84","89") | regex_replace("76","78") | regex_replace("45","23"}}"

有没有办法,我可以管道 regex_replace 一次并用多个值替换多个模式。

标签: pythonjsonregexansible

解决方案


问:“我可以管道 regex_replace 一次并用多个值替换多个模式吗?”

答:不,这是不可能的。但是你可以在循环中做到这一点。例如

  vars:
    my_var: "ABCDEFGH"

  tasks:
    - set_fact:
        my_var: "{{ my_var | regex_replace(item.regex, item.replace) }}"
      loop:
        - {regex: "A", replace: "1"}
        - {regex: "C", replace: "3"}
        - {regex: "E", replace: "5"}
    - debug:
        var: my_var

    "my_var": "1B3D5FGH"

或者,为了最小化代码,下面的任务给出了相同的结果

    - set_fact:
        my_var: "{{ my_var | regex_replace(item.0, item.1) }}"
      loop:
        - ["A", "1"]
        - ["C", "3"]
        - ["E", "5"]

推荐阅读