Ansible教程

Ansible Lineinfile

Ansible Lineinfile

lineinfile 是 Ansible 工具箱中最强大的模块之一。 Ansible lineinfile 模块用于插入一行、修改、删除和替换现有行。
Ansible lineinfile 模块可以节省您在运行文件和修改其内容时的时间,例如添加文件中的新行或更新、在找到特定文本时替换文件中的一行等等。
Ansible lineinfile 提供了许多参数来快速完成工作。您还可以在修改之前使用条件匹配行,使用正则表达式删除。您可以使用反向引用参数重用和修改匹配的行。
注意: 注意: Ansible lineinfile 只能用于处理文件中的一行。如果要替换多行,请替换模块,如果要插入、更新、删除文件中的行块,请使用 blockinfile 模块。

插入一行

让我们看看如果文件不存在一行,如何将其写入文件。您可以使用 path(>Ansible 2.3)/dest 参数设置要修改的文件的路径。并使用 line 参数设置要插入的行。
下面的示例将"在文件中插入一行"写入文件"remote_server.txt"。新行将添加到 EOF。如果该行已经存在,则不会合并。
您还可以设置 create 参数,表示如果该文件不存在,则创建一个新文件.状态的默认值为 present。
-hosts: loc
  tasks:
   -name: Ansible insert lineinfile 
      lineinfile:
        dest: /home/lidihuo/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/lidihuo/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 regexp 取消注释行
-name: Ansible lineinfile backrefs example
  lineinfile:
    dest: /etc/ansible/ansible.cfg
    regexp: '#(inventory = /home/fedora/inventory.ini.*)'
    line: '\1'
    backrefs: yes
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4