ansible - 如何删除 Ansible 中匹配项之间的空白行

标签 ansible

我正在尝试使用 Ansible 删除两行之间的空白行,但无法使其工作。我的源文件如下所示:

###This line has blank lines after it



###End of block

#More lines

我希望结果如下所示:

###This line has blank lines after it
###End of block

#More lines

到目前为止,我使用替换模块完成了此任务:

- name: Remove blank lines between matches
  replace:
    path: /home/vagrant/abcd
    after: '###This line has blank lines after it'
    regexp: '(^\n)'
    replace: ''
    before: '###End of block'

但该任务似乎不起作用。事实上,该任务不会对源文件执行任何操作。

如果我删除任务的最后一行(之前:'###End of block')。这些行确实被删除,但它也删除了所有空白行,直到 EOF,这不是我想要的。这是删除最后一行后的结果:

###This line has blank lines after it###End of block
#More lines

这不是预期的。

我有一个使用 sed 的解决方案,但我想尽可能保持它的幂等性。也许我需要更好的正则表达式?

请问有什么想法吗?

谢谢。

最佳答案

经过更多的尝试并使用正则表达式后,我想出了这个:

- name: Remove blank lines between matches
  replace:
    path: /home/vagrant/abcd
    after: '###This line has blank lines after it'
    regexp: '(^\s*$)'
    replace: ''

这会产生:

###This line has blank lines after it
###End of block

#More lines

这就是我所追求的。但我会等到 bug 修复后再在生产中使用。

关于ansible - 如何删除 Ansible 中匹配项之间的空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47910129/

相关文章:

python - 抑制 Ansible Ad Hoc 警告

Ansible - 使用来自另一个主机的变量

docker - 从 Ansible 使用预设 IP 运行 Docker 容器

pip - Ansible pip 模块 : name package and umask 0022 Fatal error: invalid literal for int() with base 8: '18' umask must be an octal integer

git - 适用于多种环境的 Ansible Web 服务器角色版本控制策略

Ansible Tower 获取文件作业返回正常,但本地计算机上不存在文件

ansible - 如何使用 Ansible 正确处理网络接口(interface)配置文件?

ansible - 从 Ansible 中的自定义模块访问剧本变量

ansible - 如何避免在没有主机匹配时运行剧本?

ansible - 评估 ansible 条件中的返回码