【问题标题】:Ansible regrex_replace to modify file name through path(url)Ansible regrex_replace 通过 path(url) 修改文件名
【发布时间】:2020-09-09 17:04:56
【问题描述】:

我正在尝试在使用 Ansible 中的 basename 从其路径中获取文件名后修改文件名, 我成功地从名称中删除扩展名,但无法实现下一个目标

路径:/bin/data/xyzzz_no_db_20.9.1-82.tgz

(即:xyzzz_no_db_20.9.1-82.tgz => xyzzz_no_db_20.9.1-82 => xyzzz_no_db:20.9.1-82。(预期最终结果

基本上,需要将最后出现的 (_)(下划线) 替换为 (:)(coln),并使用下面提到的代码尝试相同,它们必须进行一些修改。

提前致谢。

- name: Modify image name
  set_fact:
     imagename: " {{ latest_file.path | basename | regex_replace('.tgz', '') | regex_replace('/^[^_^_]*[0-9]/',':')}}"

【问题讨论】:

  • 感谢@WiktorStribiżew 它按要求工作.. :)

标签: regex ansible


【解决方案1】:

您实际上可以为此使用单个正则表达式:

(.*)_(.*)\.tgz$

替换为\1:\2。见regex demo

在代码中,

- name: Modify image name
  set_fact:
     imagename: " {{ latest_file.path | basename | regex_replace('(.*)_(.*)\\.tgz$', '\\1:\\2') }}"

正则表达式详细信息

  • (.*) - 第 1 组 (\1):除换行符之外的任何零个或多个字符,尽可能多
  • _ - 下划线(未捕获,我们将在替换模式中将其替换为 :
  • (.*) - 第 2 组 (\2):除换行符之外的任何零个或多个字符,尽可能多
  • \.tgz - .tgz 子字符串(注意 . 被转义以匹配文字 . 字符)
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多