首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们是否可以使用lineinfile模块在与Regexp匹配的基础上在Ansible中添加新行?

我们是否可以使用lineinfile模块在与Regexp匹配的基础上在Ansible中添加新行?
EN

Stack Overflow用户
提问于 2019-04-29 09:25:21
回答 2查看 73关注 0票数 0

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

代码语言:javascript
复制
interface gigabit0/1/2
shutdown
!
interface gigabit0/2/3
shutdown
!

我已经使用了一个已经存在的"lineinfile“模块来匹配regex,并在匹配之后添加了一个新行。

代码语言:javascript
复制
---
- 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-29 10:50:56

使用替换。下面这出戏

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

带着文件

代码语言:javascript
复制
> cat ha.txt
interface gigabit0/1/2
interface gigabit0/2/3

给予:

代码语言:javascript
复制
> cat ha.txt
interface gigabit0/1/2
shutdown
!
interface gigabit0/2/3
shutdown
!
票数 0
EN

Stack Overflow用户

发布于 2020-09-21 22:12:38

这里有点吹毛求疵:在弗拉基米尔的原版和优秀版中,regexp可能会在interface之后失去interface的角色。

代码语言:javascript
复制
regexp: '(interface\s[a-z]\w*/[0-9]/[0-9])'

? as-is意味着interface中的e char是可选的,这没有多大意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55900398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档