ansible模块之lineinfile

一、前言:

lineinfile模块,功能有点类似sed
常用功能:对文件的行替换、插入、删除

解析:

替换/插入:如果有重复的,都是匹配最后一个 ,
如果不加backrefs项, 替换/插入如无匹配者,则将line所指定的行插入到文件的末尾
删除:如果有重复的,全部删除

二、常用参数:

path/dest:  目标文件绝对路径+文件名,必须参数
line:        替换/插入的内容
regexp:      待匹配内容
insertbefore:   匹配行前面插入 
insertafter:    匹配行面插入 
state:    删除匹配行,需要将值设为absent,默认值present。 
backup:   是否在修改文件之前对文件进行备份。 yes/no
create:   当要操作的文件并不存在时,是否创建对应的文件。yes/no
backrefs:yes/no
1.backrefs为no时,如果没有匹配,则添加一行line。如果匹配了,则把匹配内容替被换为line内容。
2.backrefs为yes时,如果没有匹配,则文件保持不变。如果匹配了,把匹配内容替被换为line内容。

三、实验环境

ansible主机:  node2   192.168.199.202
文件主机:     node1   192.168.199.201

3.1 ansible设置

[root@node2 ~]# tail -n2 /etc/ansible/hosts
[node]
192.168.199.201

执行剧本命令:

ansible-playbook lineinfile.yml

3.2 node1 上实验文件如下:

[root@node1 ~]# cat line.txt
#*.* @@remote-host:514
1111111111111111111111
aaaaaaaaaaaaaaaaaaaaaa
cccccccccccccccccccccc
# ### end of the forwarding rule ###
5555555555555555555555

四、举个栗子:

4.1 编辑剧本(node2)

vim lineinfile.yml
---
- hosts: node
  gather_facts: no
  become: yes
  become_method: sudo

4.2 备份文件

  tasks:
  - name: 'backup file'
    lineinfile:
      path: /root/line.txt
      backup: yes
      line: state=present

node1结果如图:
在这里插入图片描述
解释:

  1. 这里的line.txt.115922才是原文件
  2. line.txt是新文件,并且在最后会多一行:state=present

4.3 替换整行

  tasks:
  - name: 'replace'
    lineinfile:
      path: /root/line.txt
      regexp: '#*.* @@remote-host:514'
      line: '此行已被我替换了'

node1结果如图:
在这里插入图片描述

4.4 在匹配行前面插入

  tasks:
  - name: '在匹配行前面插入'
    lineinfile:
      path: /root/line.txt
      insertbefore: 'aaaaaaaaaaaaaaaaaaaaaa'
      line: '成功在匹配行前面插入一行'

node1结果如图:
在这里插入图片描述

4.5 在匹配行后面插入

  tasks:
  - name: "在匹配行后面插入"
    lineinfile:
      dest: /root/line.txt
      insertafter: 'aaaaaaaaaaaaaaaaaaaaaa'
      line: 成功在匹配行后面插入一行

node1结果如图:
da.png)

4.6 删除匹配行

这里临时在测试文件结尾追加一行:J+sZc_j!s@#x
用于验证在特殊符号下,需要转义

  tasks:
  - name: '删除匹配行'
    lineinfile:
      dest: /root/line.txt
      regexp: 'J\+sZc\_j\!s\@\#x'
      state: absent

node1结果如图:
在这里插入图片描述

4.7 没有匹配行情况下添加一行

在没有匹配行add a line!的情况下,添加行,并且添加在文件末尾
并且如果重复执行,追加的内容也只有一行,很适用于在文末追加一行内容

  tasks:
  - name: 'add a line'
    lineinfile:
      dest: /root/line.txt
      regexp: 'add a line!'
      line: '我出现代表没有匹配项'

node1结果如图:
在这里插入图片描述

4.8 在4.7的基础上添加backrefs: yes,则不会在文末追加

  tasks:
  - name: 'backrefs'
    lineinfile:
      dest: /root/line.txt
      backrefs: yes
      regexp: 'add a line~~~'
      line: '没有匹配项我不会出现在文件中'

node1结果如图:(可以看到文件内容未变)
在这里插入图片描述

4.9 新建文件

  tasks:
  - name: 'create'
    lineinfile:
      dest: /root/test.txt
      create: yes
      line: state=present

node1结果如图:
在这里插入图片描述

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值