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

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

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

例如,authorized_keys文件是:

 .....
 abhi foo+bar saken
 ......(EOF)

我想删除abhi foo bar saken line但是Ansible没有删除这一行因为该字符.

我能够删除不包含字符的行.

任务:

- name: Delete keys in sysadmin/.ssh/authoriezd_keys
  lineinfile: dest=/home/{{name}}/.ssh/authorized_keys
              state=absent 
              regexp='^{{key}}$' 

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

最佳答案 问题可能是在正则表达式中有意义.

你应该能够通过逃避来解决它.如果您无法从定义{{key}}的源代码执行此操作,则可以使用replace Jinja过滤器将其转义:

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

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

点赞