ansible的lineinfile模块
Posted caibao666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible的lineinfile模块相关的知识,希望对你有一定的参考价值。
lineinfile模块可以确保某一行文本存在于指定的文件中,或者确保从文件中删除指定的文本,还可以根据正则表达式替换某一行文本。下面罗列一下lineinfile模块的参数:
path:必须参数,指定要操作的文件
line:用来指定文本内容
regexp:使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能匹配,则只有最后面被匹配的行才会被替换,当删除文本时,如果有多行文本被匹配,那么所有匹配行都将被删除。
state:当想要删除对应的文本时,需要将state参数的值设置为absent,默认为present
backrefs:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,再line参数中也不能对正则中的分组行进行引用,除非将backrefs参数的值设置为yes,backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了。backrefs=yes除了能开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持文件不变。
insertafter:借助insertafter可以将文本插入到指定的行后,insertafter参数的值可以设置为EOF或者正则表达式,默认为EOF,如果将insertafter的值设置为正则表达式,表示将文本插入到匹配到正则的行后,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数将会被忽略。
insertbefore:将文本插入到指定行之前,insertbefore的值可以设置为BOF或者正则表达式,BOF为Begin Of File,表示插入到文档开头,默认BOF,如果将insertbefore设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数被忽略。
backup:是否在修改文件之前对文件进行备份。默认为false
create:当要操作的文件并不存在时,是否创建对应的文件。默认为false
示例文件:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
示例一:确保指定的一行文本存在于文件中,如果不存在,则不做任何操作,如果存在,默认在文件末尾加入:
示例二:根据正则表达式替换某一行,如果多行匹配,那么只有最后一行才会被替换,默认如果没有匹配到任何行,那么line中的内容会被添加到文件末尾。
原文件则变为:
示例三:根据正则表达式替换某一行,如果多行被匹配,那么只有最后一行才会被替换;如果无任何行被匹配,那么对文件不进行任何操作:
示例四:根据正则表达式删除匹配行,如果多行匹配,那么删除所有匹配行:
示例五:根据line参数的内容删除行,如果文件中有多行匹配,那么这些相同的行都会被删除
后向引用:默认情况下,lineinfile模块是不支持后向引用的,关于后向引用概念,可参考http://www.zsythink.net/archives/1952。如果将backrefs设置为yes,表示开启后向引用。
示例原文件:
Hello every one
Hello my dear
Who is say Hello
Hello body is Hello boy
Hello dear is Hello god
示例六:将示例原文件中的第二行替换为Hello
替换后的文件:
示例七:将示例原文件中的第五行替换为Hello god
替换后的文件:
以上是关于ansible的lineinfile模块的主要内容,如果未能解决你的问题,请参考以下文章
Ansible:带有正则表达式的lineinfile模块并循环添加没有正则表达式的行
ansible中blockinfile和lineinfile模块的使用