Bash 我想知道是否有一种Ansible(regex_replace)方法可以切断版本号 是否有一种Ansible(regex_replace)方法可以切断版本号?

Bash 我想知道是否有一种Ansible(regex_replace)方法可以切断版本号 是否有一种Ansible(regex_replace)方法可以切断版本号?,bash,shell,ansible,Bash,Shell,Ansible,我正在安装压缩档案。它位于{{HomeDir}}/ms2install目录 文件名:ms2install_1.16.1.8.tgz 我有一个提取版本号的shell任务 # Get the version number from the archive - name: Get MS2 verion number from the the file list shell: "ls -1 {{ HomeDir }}/ms2install | grep \"ms2iinstall_.*tgz\" |

我正在安装压缩档案。它位于{{HomeDir}}/ms2install目录

文件名:ms2install_1.16.1.8.tgz

我有一个提取版本号的shell任务

# Get the version number from the archive
- name: Get MS2 verion number from the the file list
  shell: "ls -1 {{ HomeDir }}/ms2install | grep \"ms2iinstall_.*tgz\" | cut -d_ -f2 | rev | cut -c5- | rev"
  delegate_to: 127.0.0.1
  register: ms2Num
ms2Num是1.16.1.8

我可以在这里使用shell命令,因为它不会在单个命令中更改系统和字符串操作。 不,我只需查找1.16即可在取消压缩存档后在远程系统中查找目录。我想要的目录是几个级别的子目录。我还想确保从正确的目录安装软件包

我可以使用simular shell命令提取1.16

# Get the version number from the archive
- name: Get truncated MS2 verion number from the the file list
  shell: "ls -1 {{ HomeDir }}/ms2install | grep \"ms2i_.*tgz\" | cut -d_ -f2 | rev | cut -c5- | rev | | cut -d. -f1-2"
  delegate_to: 127.0.0.1
  register: ms2KurtzNum
这是可行的,我注册了一个短字符串1.16

我想知道这两种定义是否都有正则表达式替换解决方案。因此,只使用字符串的第一部分创建一个新的var1.16。 对于正则表达式:
/(^(\d{1,3}\.\d{1,3}))/g
起作用,但在Ansible中,表达式确实给出了“1.16”子字符串

- name: Find version directory
  find:
    paths: "{{ DestDir | join }}/ms2install/patches"
    patterns: "{{ ms2Num.stdout | regex_replace( '([1-9]{1,3}\\.[1-9]{1,3}))' '\\1' ) }}" # <== pattern 1.16
    recurse: yes
    file_type: directory
  register: PatchVersionDir
-名称:查找版本目录
查找:
路径:“{DestDir | join}}/ms2install/patches”
模式:“{ms2Num.stdout | regex|u replace('([1-9]{1,3}\\.[1-9]{1,3}))'\\1'}}”
问:“Ansible中是否有比shell任务更好的解决方案?”

A:是的。它是。例如,下面的任务(给定
my_文件名:ms2install_1.16.1.8.tgz

给予


请定义
不起作用
$0.01:您的正则表达式中似乎有一个额外的右括号$0.02:您的正则表达式替换筛选器似乎缺少右括号$0.03:您正在尝试匹配某个内容,并将其替换为您最初匹配的内容。这很有效。我想可能需要一些过滤器。我不知道接近python的语法会是什么。几乎所有ansible都是隐藏的python-我实际上不知道任何不知道的东西-尽管我确信有一些例子不是这样的。
    - set_fact:
        ms2Num: "{{ (my_filename|splitext).0.split('_').1 }}"
    - set_fact:
        ms2Num_short: "{{ ms2Num.split('.')[:2]|join('.') }}"
    - debug:
        msg:
          - "{{ ms2Num }}"
          - "{{ ms2Num_short }}"
    "msg": [
        "1.16.1.8", 
        "1.16"
    ]