首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用其他值从文本文件中提取IP地址

使用其他值从文本文件中提取IP地址
EN

Stack Overflow用户
提问于 2022-09-10 15:51:14
回答 2查看 133关注 0票数 0

假设您在本地主机上有一个变量文件。我们可以称它为values.txt,其内容如下:

代码语言:javascript
运行
复制
isjwidywiudywdiuwqoq10.110.195.108xxsxww/ed/swqqwfdfwef8.8.8.8

您只想从所有这些垃圾中提取IP地址值。我已经多次尝试使用文件查找和ipaddr过滤器。我所做的看起来是这样的:

代码语言:javascript
运行
复制
- name: extract IPs only
  debug: 
    msg: "{{ query('file', 'values.txt') | ipaddr }}"

但是,这是行不通的!我怎么才能在只有IP的地方这么做?

EN

回答 2

Stack Overflow用户

发布于 2022-09-10 16:06:41

您可以使用正则表达式筛选器来完成此操作。要从字符串中提取所有ip地址,听起来似乎需要找到与[0-9]+\.[0-9]+\.[0-9]+\.[0-9]匹配的所有内容。为了从字符串中提取表达式的所有匹配项,Ansible为我们提供了regex_findall过滤器。

例如:

代码语言:javascript
运行
复制
- hosts: localhost
  gather_facts: false
  tasks:
    - debug:
        msg: >-
          {{ "isjwidywiudywdiuwqoq10.110.195.108xxsxww/ed/swqqwfdfwef8.8.8.8" | regex_findall("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+") }}

上面的剧本将输出:

代码语言:javascript
运行
复制
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "10.110.195.108",
        "8.8.8.8"
    ]
}
票数 1
EN

Stack Overflow用户

发布于 2022-09-11 05:33:11

这里有一个例子

代码语言:javascript
运行
复制
# // Ansible playbook to  Extract IP addresses from a text file

- hosts: localhost
  gather_facts: false
  tasks:
  - name: Extract IP addresses from a text file
    set_fact:
      ips: "{{ lookup('file', '/tmp/tmpdir/test.txt') | regex_findall('(?<!\\d)(?:\\d{1,3}\\.){3}\\d{1,3}(?!\\d)')   }}" 
    register: result

  - debug:
      msg: "{{ result }}"

  • 示例运行

代码语言:javascript
运行
复制
╰─ cat test.txt           
hello
12.14.34.45asdfadsf234234
asdfasldfkj23.34.45.23alsdjfwerk
fafn aslkdfj vahsdifadk 23.43.34.232 asldkvvnasdfads


╰─ ansible-playbook test.yaml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] ********************************************************************************************************************************************************************************

TASK [Extract IP addresses from a text file] ****************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": {
        "ansible_facts": {
            "ips": [
                "12.14.34.45",
                "23.34.45.23",
                "23.43.34.232"
            ]
        },
        "changed": false,
        "failed": false
    }
}

PLAY RECAP **************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73673194

复制
相关文章

相似问题

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