lineinfile/regexp/line:为什么文件末尾有一行



我不明白lineinfile是如何工作的,我使用:

- name: "configure"
lineinfile:
path: /etc/apt/apt.conf.d/50unattended-upgrades
regexp: '^//      "${distro_id}:${distro_codename}-updates";'
line: '      "${distro_id}:${distro_codename}-updates";'
state: present

我预计文件中的这一行将被取消注释:

//      "${distro_id}:${distro_codename}-updates";

相反,这一行保持原样,但在文件的末尾,我看到了:

"${distro_id}:${distro_codename}-updates";

所以"匹配"发生了,但为什么在文件末尾有新行而不是替换?

您的regexp不会转义所有特殊符号,因此不存在导致添加新行而不是替换的匹配项。根据Python的重模块文档,应该转义花括号。

这个任务在我的Ubuntu 18.04服务器上按预期运行。

- name: "configure"
lineinfile:
path: /etc/apt/apt.conf.d/50unattended-upgrades
regexp: '^//s+"${distro_id}:${distro_codename}-updates";'
line: '       "${distro_id}:${distro_codename}-updates";'
state: present

差异

-// "${distro_id}:${distro_codename}-updates";
+   "${distro_id}:${distro_codename}-updates";

肯定还有其他问题。该代码的工作原理为expexted

shell> diff 50unattended-upgrades 50unattended-upgrades.orig 
1c1
<       "${distro_id}:${distro_codename}-updates";
---
> //      "${distro_id}:${distro_codename}-updates";

最新更新