我们可以使用lineinfile模块基于匹配Regexp在Ansible中添加新行吗?

时间:2019-04-29 09:25:22

标签: ansible

基本上,我有一个包含接口信息的文本文件(即接口gigabit0 / 1/2,接口gigabit0 / 2/3)。我需要在每个接口命令之后添加一个额外的块。它必须如下所示:-

interface gigabit0/1/2
shutdown
!
interface gigabit0/2/3
shutdown
!

我使用了一个已经存在的“ lineinfile”模块来匹配正则表达式,并在匹配后添加新行。

---
- hosts: localhost
  tasks:
    - name: Ansible insert
      lineinfile:
        path: ./ha.txt
        line: |
              shutdown
              !
        insertafter: interface?\s[a-z]\w*/[0-9]/[0-9]
        state: present
      with_lines: cat ha.txt

2 个答案:

答案 0 :(得分:0)

使用replace。下面的游戏

tasks:
  - replace:
      path: ha.txt
      regexp: '(interface?\s[a-z]\w*/[0-9]/[0-9])'
      replace: |-
               \1
               shutdown
               !

与文件

> cat ha.txt
interface gigabit0/1/2
interface gigabit0/2/3

给予:

> cat ha.txt
interface gigabit0/1/2
shutdown
!
interface gigabit0/2/3
shutdown
!

答案 1 :(得分:0)

这里只是一点点挑剔:在弗拉基米尔(Vladimir)的原始版本和优秀版本中,正则表达式都可能在?之后丢失interface字符:

regexp: '(interface\s[a-z]\w*/[0-9]/[0-9])'

按原样的?表示e中的interface字符是可选的,没有什么意义。