如何使用 ansible 从一行中删除特定字符串

如何使用 ansible 从一行中删除特定字符串

我在 /etc/yum.conf 中的 yum 排除列表中添加了一些软件包,我想从排除列表中删除特定的软件包

例子:

排除=java* 排除=内核* java* 排除=java* 内核* 排除=内核* abc* java* def*

我尝试添加#,但这没有达到目的,并且为所有排除语句添加了注释。

- name: Comment Java exclusion
  replace:
    path: /etc/yum.conf
    regexp: '(.*java*)'
    replace: '#\1'

增加了更多案例场景。

答案1

将其替换为空字符串。

- name: Comment Java exclusion
  replace:
    path: /etc/yum.conf
    regexp: '(java\*\s*)'
    replace: ''

对正则表达式的更改:

  • .*也会删除exclude=,所以我删除了它
  • 需要*转义,它是一个正则表达式修饰符
  • 添加\s*以删除尾随空格

编辑

甚至更好:

- name: Comment Java exclusion
  replace:
    path: ~/ansible/test.blah
    regexp: '^(exclude=.*)java\*\s*'
    replace: '\1'

这确保只有以 开头的行exclude=会受到影响,并且即使java*不是列表中的第一个项目也能正常工作。

相关内容