该模块用于从一个文件中搜索一行,确保该行存在或删除该行。lineinfile模块主要用于改变一个文件的一行。如果想要改变文件中相似的多行,可以使用replace模块。如果想要插入/更新/删除一个行块,可以使用blockinfile模块。其他情形,可以使用copy或template模块。
backrefsstate=present一起使用。如果打开这个标记,那么在line参数中可以使用 位置分组 和 命名分组,lineinfile模块会使用regexp所捕获的分组填充它们。backrefs会改变模块的一些操作:insertbefore和insertafter参数会被忽略。当regexp不匹配文件中的任何行时,文件不会做任何修改,否则 使用扩展的line参数 替换 最后一个匹配正则表达式的行。backupcreatestate=present一起使用。如果指定了这个参数,当要修改的文件不存在的时候,会创建它。否则会报错。destinsertbeforebackrefs=yes一起使用。当regexp不匹配文件中的任何行的时候,会将line参数所指定的行,插入到insertbefore所指定的正则表达式匹配的行中的最后一行的前面,当insertbefore所指定的正则表达式不匹配任何行时,会插入到文件的末尾,同时insertbefore还可以是一个特殊的值:BOF(代表文件的开始);否则,会使用line参数所指定的行 替换 regexp所匹配的行中的最后一行。insertafterinsertbefore类似,不同的是,insertbefore会将新行插入到其所指定的正则表达式匹配的行中的最后一行的前面,而insertafter是插入到后面。insertafter也支持一个特殊的值:EOF(代表文件的末尾)linebackrefs参数,那么line中可以包含 位置分组 或 命名分组,lineinfile模块会使用regexp捕获的分组填充它们。modemode=0644 或 mode='a+x'。owner 和 group-b提权)regexpstate=present,这个正则表达式所匹配的行中的最后一行会被替换;对于state=present,会删除所有匹配的行。
statevalidate%s来传递的,并且在validate中必须包含%s。在校验命令中,不能使用shell的一些特性,比如扩展,管道等。
下面是来自于官方文档的例子:
# 将 /etc/selinux/config 文件中所有匹配 ^SELINUX= 正则表达式的行中的最后一行使用 SELINUX=enforcing 替换;如果regexp不匹配文件中的任何一行,则将line所指定的行插入到文件的末尾
- lineinfile: dest=/etc/selinux/config regexp=^SELINUX= line=SELINUX=enforcing
# 将 /etc/sudoers 文件中,所有匹配 ^%wheel 的行删除
- lineinfile: dest=/etc/sudoers state=absent regexp="^%wheel"
# 将 /etc/hosts 文件中,所有匹配 ^127\.0\.0\.1 正则表达式的行中的最后一行,替换成 127.0.0.1 localhost,当 ^127\.0\.0\.1 不匹配文件中的任何一行的时候,则将line所指定的行插入到文件的末尾。并将文件的属主设置成root,属组设置成root,将文件的权限设置为0644。
- lineinfile: dest=/etc/hosts regexp='^127\.0\.0\.1' line='127.0.0.1 localhost' owner=root group=root mode=0644
- lineinfile: dest=/etc/httpd/conf/httpd.conf regexp="^Listen " insertafter="^#Listen " line="Listen 8080"
- lineinfile: dest=/etc/services regexp="^# port for http" insertbefore="^www.*80/tcp" line="# port for http by default"
# Add a line to a file if it does not exist, without passing regexp
- lineinfile: dest=/tmp/testfile line="192.168.1.99 foo.lab.net foo"
# Fully quoted because of the ': ' on the line. See the Gotchas in the YAML docs.
- lineinfile: "dest=/etc/sudoers state=present regexp='^%wheel' line='%wheel ALL=(ALL) NOPASSWD: ALL'"
- lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' backrefs=yes
# Validate the sudoers file before saving
- lineinfile: dest=/etc/sudoers state=present regexp='^%ADMIN ALL\=' line='%ADMIN ALL=(ALL) NOPASSWD:ALL' validate='visudo -cf %s'
ansible 2.2.1.0下测试的