lineinfile/regexp/line: 为什么行在文件末尾?
lineinfile/regexp/line: why line at the end of file?
我不明白 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";
所以 "match" 发生了,但为什么文件末尾有新行而不是替换?
肯定还有其他问题。代码按预期工作
shell> diff 50unattended-upgrades 50unattended-upgrades.orig
1c1
< "${distro_id}:${distro_codename}-updates";
---
> // "${distro_id}:${distro_codename}-updates";
您的正则表达式没有转义所有特殊符号,因此没有匹配导致添加新行而不是替换。根据 Python's re module documentation.
,花括号应该被转义
此任务在我的 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";
我不明白 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";
所以 "match" 发生了,但为什么文件末尾有新行而不是替换?
肯定还有其他问题。代码按预期工作
shell> diff 50unattended-upgrades 50unattended-upgrades.orig
1c1
< "${distro_id}:${distro_codename}-updates";
---
> // "${distro_id}:${distro_codename}-updates";
您的正则表达式没有转义所有特殊符号,因此没有匹配导致添加新行而不是替换。根据 Python's re module documentation.
,花括号应该被转义此任务在我的 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";