我不明白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";
发生“匹配”,但是为什么文件末尾有换行而不是替换?
答案 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";