lineinfile / regexp / line:为什么在文件末尾添加行?

时间:2020-04-26 18:03:42

标签: ansible ansible-2.x

我不明白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";

发生“匹配”,但是为什么文件末尾有换行而不是替换?

2 个答案:

答案 0 :(得分:2)

您的正则表达式不会转义所有特殊符号,因此不存在导致添加新行而不是替换行的匹配项。根据{{​​3}},应避免使用大括号。

此任务在我的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";

答案 1 :(得分:1)

肯定还有其他问题。代码可以扩展

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