ansible lineinfile模块

lineinfile是Ansible工具箱中功能最强大的模块之一。 Ansible lineinfile模块用于插入行,修改,删除和替换现有行。
Ansible lineinfile模块可以节省你处理文件和修改运行内容的时间,例如在文件中添加新行或更新,在找到特定文本时替换文件中的行等等。
Ansible lineinfile提供了许多参数来快速完成任务。你还可以在修改前使用条件匹配行,并使用正则表达式删除。你可以使用backreference参数重新使用和修改匹配的行。
注意:Ansible lineinfile仅可用于处理文件中的一行。如果要替换多行,请替换模块,如果要插入,更新,请在文件使用blockinfile模块中删除一行行。插入行
让我们看看如何在文件中不存在一行。你可以使用path(> Ansible 2.3)/ dest参数设置要修改的文件的路径。并使用line参数设置要插入的行。
下面的示例将“将行插入文件中”行写入文件“ remote_server.txt”。新行将添加到EOF。如果该行已存在,则将不会合并。
你还可以设置create参数,该参数表示如果文件不存在,则创建一个新文件。存在状态的默认值。

- hosts: loc tasks: - name: Ansible insert lineinfile lineinfile: dest: /home/srcmini/remote_server.txt line: Inserting a line in a file. state: present create: yes

删除线
将状态参数设置为不存在或删除指定的行。该行的所有出现都将被删除。
- hosts: loc tasks: - name: Ansible lineinfile remove the line lineinfile: dest: /home/srcmini/remote_server.txt line: Removed lines. state: absent

替换或修改线
【ansible lineinfile模块】要修改行,你需要将Ansible backrefs参数与regexp参数一起使用。这应该与state = present一起使用。
如果正则表达式与任何行都不匹配,则文件不会更改。如果正则表达式匹配一行或多行,则最后匹配的行将被替换。 regexp中的分组元素已填充,可用于修改。
在下面的示例中,我们在一行上进行注释。通过将圆括号放在“ \ 1”内可以捕获整行。 ‘
你可以具有多个捕获,并使用’ \ 1’ ,’ \ 2’ ,’ \ 3’ 等调用它们。
使用Ansible lineinfile backrefs注释一行
- name: Ansible lineinfile regexp replace the example lineinfile: dest: /etc/ansible/ansible.cfg regexp: '(inventory = /home/fedora/inventory.ini.*)' line: '#\1' backrefs: yes

使用lineinfile正则表达式取消注释行
- name: Ansible lineinfile backrefs example lineinfile: dest: /etc/ansible/ansible.cfg regexp: '#(inventory = /home/fedora/inventory.ini.*)' line: '\1' backrefs: yes

    推荐阅读