📜  Ansible Lineinfile

📅  最后修改于: 2020-12-26 12:32:47             🧑  作者: Mango

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/javaTpoint/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/javaTpoint/remote_server.txt
        line: Removed lines.
        state: absent

替换或修改线

要修改行,您需要将Ansible backrefs参数与regexp参数一起使用。这应该与state = present一起使用。

如果正则表达式与任何行都不匹配,则文件不会更改。如果正则表达式匹配一行或多行,则最后匹配的行将被替换。 regexp中的分组元素已填充,可用于修改。

在下面的示例中,我们在一行上进行注释。通过将圆括号放在“ \ 1”内可以捕获整行。 '#\ 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