zoukankan      html  css  js  c++  java
  • ansible的lineinfile与blockinfile模块

    一、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

     替换后的文件:

     二、blockinfile模块可以在指定的文件中插入一段文本,这段文本是被标记过的,以便在以后的操作中可以通过标记找到这段文本,然后修改或者删除这段文本。参数如下:

    path:必须参数,指定要操作的文件

    block:用于指定一段文本,与content参数相同

    marker:用于指定标记符,即一个开始标记一个结束标记;默认开始标记为# BEGIN ANSIBLE MANAGED BLOCK,结束标记为# END ANSIBLE MANAGED BLOCK,使用marker自定义标记。{mark}为内置的BEGIN和END

    state:有两个可选值,present和absent,如果对应的文件中已经存在对应标记的文本,默认会更新对应段落,在执行插入操作或更新操作时,state的值为present,默认值即为present;如果对应的文件中已经存在对应标记的文本并且将state的值设置为absent,则表示从文件中删除对应标记的段落。

    insertafter:默认值为EOF,即在文件的末尾插入文本,使用此参数可在指定的行后插入。如果多行文本都能够匹配对应的正则,则以最后一个满足条件的行为准

    insertbefore:默认值为BOF,即在文件的开头插入文本。如果多行都能够匹配对应的正则,则以最后一个满足条件的行为准

    backup:是否在修改文件之前对文件进行备份

    create:当目标文件不存在时,是否创建

     示例源文件:

    # 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=enforcing
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted

    示例一:添加文本块

    修改后的文件:

     示例二:自定义标记符

    修改后的文件:

     示例三:修改文件中的标记内容

     修改后的文件:

     示例四:删除文件中的标记块

     修改后的文件:

    PS:当state为absent时,参数block将失效,即使指定了,并且block中的内容在目标文件中匹配不到,也会删除匹配到的marker,所以,在匹配的时候,是以marker进行匹配的,上例中也是反应的淋漓尽致。

    示例五:在指定的行前插入block,多行匹配则以最后匹配行为准

     修改后的文件:

  • 相关阅读:
    吴裕雄--天生自然ANDROID开发学习:2.4.1 ScrollView(滚动条)
    吴裕雄--天生自然ANDROID开发学习:2.3.9 RatingBar(星级评分条)
    吴裕雄--天生自然ANDROID开发学习:2.3.8 SeekBar(拖动条)
    吴裕雄--天生自然ANDROID开发学习:2.3.7 ProgressBar(进度条)
    吴裕雄--天生自然ANDROID开发学习:2.3.6 开关按钮ToggleButton和开关Switch
    吴裕雄--天生自然ANDROID开发学习:2.3.5.RadioButton(单选按钮)&Checkbox(复选框)
    吴裕雄--天生自然ANDROID开发学习:2.3.4 ImageView(图像视图)
    吴裕雄--天生自然ANDROID开发学习:2.3.3 Button(按钮)与ImageButton(图像按钮)
    吴裕雄--天生自然ANDROID开发学习:2.3.2 EditText(输入框)详解
    吴裕雄--天生自然ANDROID开发学习:2.3.1 TextView(文本框)详解
  • 原文地址:https://www.cnblogs.com/caibao666/p/12606394.html
Copyright © 2011-2022 走看看