【问题标题】:Use JQ and similar to filter IPv4 and IPv6 addresses in bash使用 JQ 和类似过滤器过滤 bash 中的 IPv4 和 IPv6 地址
【发布时间】:2020-11-02 14:47:41
【问题描述】:

我正在尝试从 Cloudflare 防火墙规则中提取 IPv4 和 IPv6 地址,以便在另一个命令中使用。

这是我要过滤的完整示例 json 响应:

{
    "result": {
        "id": "78839c481cd8424fa8f0f06abd33b55f",
        "paused": false,
        "description": "Test",
        "action": "block",
        "priority": 1,
        "filter": {
            "id": "68f2efc4fa6e43f584dd4b60aca09901",
            "expression": "(ip.src in {192.168.1.1 192.168.1.2 2408:14c:dc83:9119:f9f6:c105:923:a5e3})",
            "paused": false
        },
        "created_on": "2020-11-02T13:48:31Z",
        "modified_on": "2020-11-02T13:49:02Z"
    },
    "success": true,
    "errors": [],
    "messages": []
}

我只想提取表达式字段内的任何 IPv4 或 IPv6 地址,因此在本例中为192.168.1.1 192.168.1.2

如何在bash 中执行此操作?

谢谢!

【问题讨论】:

  • 您是否可以访问jq 实用程序,或者您可以安装它。使用此工具解决问题将是微不足道的。 StackOverlow 上的一个好问题将包括您解决问题的最佳尝试。我们在这里帮助您修复您对编程的理解,而不是为您编写代码。祝你好运。

标签: bash shell sed filter jq


【解决方案1】:

使用您的 JSON,调用如下:

jq -r '.result.filter.expression
  | capture("{(?<ips>[^}]*)}").ips' example.json

将产生 IP 地址字符串:

192.168.1.1 192.168.1.2 2408:14c:dc83:9119:f9f6:c105:923:a5e3

其余的应该很容易航行。

【讨论】:

  • 感谢您的回复,我的实际json 在变量$RULE 中返回。如何在您发布的 JQ 命令中使用$RULE
  • 一个选项 - 代替example.json,写:&lt;&lt;&lt; "$RULE"
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 2022-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多