Bash 我想知道是否有一种Ansible(regex_replace)方法可以切断版本号 是否有一种Ansible(regex_replace)方法可以切断版本号?
我正在安装压缩档案。它位于{{HomeDir}}/ms2install目录 文件名:ms2install_1.16.1.8.tgz 我有一个提取版本号的shell任务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\" |
# 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"
]