我在Ansible中设置了一个事实,该变量的值为连字符,如“dos-e1-south-209334567829102380”。我想拆分,所以我只得到“dos-e1-south”
这是戏剧
- set_fact:
config: "{{ asg.results|json_query('[*].launch_configuration_name') }}"
- debug:
var: config
另一种选择是ansibles正则表达式过滤器,你可以在这里找到:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#regular-expression-filters
vars:
var: dos-e1-south-209334567829102380
tasks:
- debug:
msg: '{{ var | regex_replace("^(.*)-[^-]+$", "\\1") }}'
有相同的结果:
"msg": "dos-e1-south"
^(.*)
保留第一个反向引用中字符串开头的所有内容
-[^-]+$
找到最后一个“ - ”后跟非“ - ”字符,直到字符串结尾。
\\1
用第一个反向引用替换字符串。
一个选项是使用split()。下面的剧本
vars:
var1: dos-e1-south-209334567829102380
tasks:
- set_fact:
var2: "{{ var1.split('-') }}"
- debug:
msg: "{{ var2.0 }}-{{ var2.1 }}-{{ var2.2 }}"
给
"msg": "dos-e1-south"