使用Ansible从文件中删除一行?

Bir*_*mar 7 ansible

我有一个名为的文件authorized_keys。我需要使用Ansible脚本删除特定行。

问题是当我尝试删除包含'+'字符的行时。Ansible无法删除此行。

例如authorized_keys文件是:

 .....
 abhi foo+bar saken
 ......(EOF)
Run Code Online (Sandbox Code Playgroud)

我想删除该abhi foo+bar saken行,但Ansible不会因为该+字符而删除此行。

我可以删除不包含+字符的行。

任务:

- name: Delete keys in sysadmin/.ssh/authoriezd_keys
  lineinfile: dest=/home/{{name}}/.ssh/authorized_keys
              state=absent 
              regexp='^{{key}}$' 
Run Code Online (Sandbox Code Playgroud)

PS:我正在使用Ansible的lineinfile模块

udo*_*dan 6

问题可能是+在正则表达式中有含义。

您应该可以通过转义来解决此问题+。如果您不能从{{ key }}定义的地方执行此操作,则可以使用replaceJinja过滤器对其进行转义:

- name: Delete keys in sysadmin/.ssh/authoriezd_keys
  lineinfile: dest=/home/{{name}}/.ssh/authorized_keys
              state=absent
              regexp='^{{ key | replace("+", "\+") }}$'
Run Code Online (Sandbox Code Playgroud)

如果{{ key }}包含其他在正则表达式中具有含义的字符,则可能会遇到更多问题。如果是这种情况,我认为安全的方法是创建自己的过滤器插件,您只需在其中返回通过的输入即可re.escape