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
推荐阅读
- ansible复制模块
- ansible apt模块
- ansible调试模块用法
- ansible使用库存
- ansible yaml语法
- ansible模板
- ansible shell模块
- ansible模块
- ansible命令备忘单