使用正则表达式的Ansible提取值

西米莉

我有一个类似于下面的文件。

SITE "A" (id:1,bindings:http/*:80:,net.tcp/808:*,net.pipe/*,state:Stopped)
SITE "B" (id:2,bindings:https/*:344:,net.tcp/325:*,net.pipe/*,state:Started)
SITE "C" (id:3,bindings:http/:80:xyz.domain.com,http/*:80:xyz,http/*:80:seiging,http/*:80:seiging.domain.com,state:Started)
SITE "D" (id:4,bindings:http/:901:,http/*:80:actdaov,state:Started)
SITE "E" (id:5,bindings:https/:443:idu.domain.com,http/*:80:idu.domain.com,state:Started)

我想提取以下内容。

“ A,id:1,”,
“ B,id:2,”,
“ C,id:3,http /:80:seiging.domain.com”,
“ D,id:4,”,
“ E,id :5,http
/:80:idu.domain.com“,

第三个字段-如果存在domain.com,则需要提取该字段,否则应为空白。如果存在多个domain.com,那么我需要使用最后一个。

我尝试如下:

set_fact: inv_op="{{  item | regex_replace('SITE \\\"(.*)\\\" \((.*)\,bindings(.*)\,state.*', '\\1,\\2,\\3')  }}"

输出如下:

“ A,id:1,:http /:80:,net.tcp / 808:,net.pipe / ”,
“ B,id:2,:https
/:344:,net.tcp / 325:,net。 pipe / “,” C,id:3,:http /:80:xyz.domain.com,http / :80:xyz,http /:80:seiging,http /:80:seiging.domain.com“,
” D,id:4,:http /:901:,http /
:80:actdaov“,
” E,id:5,:https /:443:idu.domain.com,http / *:80:idu.domain。 com”,

请指教

弗拉基米尔·博特卡

可以先创建字典。例如任务

- set_fact:
    my_lines: "{{ lookup('file', 'data.csv').splitlines() }}"
- set_fact:
    my_lists: "{{ my_lists|default([]) + [item.split(' ')] }}"
  loop: "{{ my_lines }}"
- set_fact:
    my_dict: "{{ my_dict|default({})|
                 combine({item.1.1: {'id': item.2.split(',')[0].split(':')[1],
                                     'state': item.2.split(',')[-1].split(':')[1][:-1],
                                     'bindings': item.2.split(',')[1:-1]|
                                      map('regex_replace', 'bindings:', '')|list}})
                                      }}"
  loop: "{{ my_lists }}"

"my_dict": {
    "A": {
        "bindings": [
            "http/*:80:", 
            "net.tcp/808:*", 
            "net.pipe/*"
        ], 
        "id": "1", 
        "state": "Stopped"
    }, 
    "B": {
        "bindings": [
            "https/*:344:", 
            "net.tcp/325:*", 
            "net.pipe/*"
        ], 
        "id": "2", 
        "state": "Started"
    }, 
    "C": {
        "bindings": [
            "http/:80:xyz.domain.com", 
            "http/*:80:xyz", 
            "http/*:80:seiging", 
            "http/*:80:seiging.domain.com"
        ], 
        "id": "3", 
        "state": "Started"
    }, 
    "D": {
        "bindings": [
            "http/:901:", 
            "http/*:80:actdaov"
        ], 
        "id": "4", 
        "state": "Started"
    }, 
    "E": {
        "bindings": [
            "https/:443:idu.domain.com", 
            "http/*:80:idu.domain.com"
        ], 
        "id": "5", 
        "state": "Started"
    }
}

然后打印数据。例如任务

“第三个字段-如果存在domain.com,则需要将其提取,如果不是,则应为空白。如果存在多个domain.com,则需要采用最后一个。”

- debug:
    msg: |
      {{ item.key }},id:{{ item.value.id }},
      {%- if item.value.bindings|select('search', 'domain\.com')|list %}
      {{ item.value.bindings|select('search', 'domain\.com')|reverse|list|first }},
      {% endif %}
  loop: "{{ my_dict|dict2items }}"

"msg": "A,id:1,\n"
"msg": "C,id:3,http/*:80:seiging.domain.com,\n"
"msg": "B,id:2,\n"
"msg": "E,id:5,http/*:80:idu.domain.com,\n"
"msg": "D,id:4,\n"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式提取值

来自分类Dev

在JMeter正则表达式提取器中使用正则表达式获取值

来自分类Dev

从正则表达式中提取值:c#

来自分类Dev

正则表达式从插入查询中提取值

来自分类Dev

正则表达式//从<a>链接中提取值

来自分类Dev

使用正则表达式提取值表单JSON有效负载

来自分类Dev

使用正则表达式从字符串中提取值

来自分类Dev

我如何使用正则表达式从字符串中提取值

来自分类Dev

使用正则表达式(python)从文件中提取值的简单方法

来自分类Dev

使用正则表达式提取值表单JSON有效负载

来自分类Dev

使用正则表达式从“变量=值”字符串中提取值

来自分类Dev

使用正则表达式从字符串中提取值

来自分类Dev

使用正则表达式从R中的字符串中提取值

来自分类Dev

使用正则表达式组从字符串中提取值

来自分类Dev

Jmeter无法使用正则表达式提取器获取值

来自分类Dev

使用 imacros eval 通过正则表达式提取值

来自分类Dev

使用c#中的正则表达式从json响应中提取值

来自分类Dev

在 PowerShell 中从字符串中提取值(使用正则表达式)

来自分类Dev

使用Java正则表达式获取值

来自分类Dev

我可以在单个正则表达式字符串中使用正则表达式提取值吗

来自分类Dev

正则表达式获取值

来自分类Dev

使用正则表达式提取模式

来自分类Dev

使用javascript正则表达式提取图像路径

来自分类Dev

使用正则表达式从网页中提取表格

来自分类Dev

使用正则表达式提取div

来自分类Dev

使用Scala正则表达式提取viewState

来自分类Dev

使用正则表达式提取OTP密钥

来自分类Dev

使用正则表达式提取重复模式

来自分类Dev

R:如何使用正则表达式提取句子

Related 相关文章

热门标签

归档