Ansible字符串分割:截取指定分隔符前的路径片段
实现方法
这里提供两种基于Ansible内置过滤器的实现方式,均可满足你的需求:
方法一:使用split过滤器
通过将原字符串按/orabackups/分割,取分割后的第一个元素即可得到目标路径:
- name: 截取路径至orabackups前的部分 set_fact: abc: "{{ xyz.split('/orabackups/')[0] }}"
原理:split('/orabackups/')会从原字符串中第一个/orabackups/位置切开,返回包含前后两段内容的列表,取索引0的元素就是所需的路径前缀。
方法二:使用regex_replace过滤器
利用正则表达式匹配并保留orabackups之前的所有内容:
- name: 截取路径至orabackups前的部分 set_fact: abc: "{{ xyz | regex_replace('^(.*)/orabackups/.*$', '\\1') }}"
原理:正则^(.*)/orabackups/.*$匹配整个字符串,其中(.*)捕获orabackups之前的所有内容,替换时用\1引用这个捕获组,最终得到目标路径。
完整测试Playbook
--- - name: 测试路径截取逻辑 hosts: localhost vars: xyz: "/u01/dbbackup_nfs/orabackups/odaserver-c/database/857970682/akash_2/db" tasks: - name: 用split方法设置abc set_fact: abc_split: "{{ xyz.split('/orabackups/')[0] }}" - name: 用regex_replace方法设置abc set_fact: abc_regex: "{{ xyz | regex_replace('^(.*)/orabackups/.*$', '\\1') }}" - name: 输出结果 debug: msg: "split方法结果: {{ abc_split }}, regex方法结果: {{ abc_regex }}"
执行后两种方法都会输出预期的/u01/dbbackup_nfs。
内容的提问来源于stack exchange,提问作者Akash-BLR
相关产品推荐
相关产品推荐

