小编ph3*_*3ro的帖子

如何获取另一个字段为 true 的 JSON 对象的特定字段

我想从下面的命令中获取特定信息

[root@test opc]# /bin/oci compute instance list-vnics --instance-id ocid1.instance.oc1.ap-mumbai-1.anrg6ljrkfvuezyc6w4ytv75l55nscz7gg7rwzg55twubrza2uz4j7kzu66a
Run Code Online (Sandbox Code Playgroud)

输出如下

{
  "data": [
    {
      "availability-domain": "ucJX:AP-MUMBAI-1-AD-1",
      "compartment-id": "ocid1.tenancy.oc1..aaaaaaaaqtzldjhvlvbaoheda67fuwkaldini7h6txiglp7yrx2nc4pm3nka",
      "defined-tags": {
        "Oracle-Tags": {
          "CreatedBy": "oracleidentitycloudservice/abcd7@gmail.com",
          "CreatedOn": "2022-08-23T12:08:39.326Z"
        }
      },
      "display-name": "xx",
      "freeform-tags": {},
      "hostname-label": null,
      "id": "ocid1.vnic.oc1.ap-mumbai-1.abrg6ljrdvonadtpflqh2zqd5f4i6nuhppq2pzdvuvr75w4mz6mvy7hdhuia",
      "is-primary": false,
      "lifecycle-state": "AVAILABLE",
      "mac-address": "02:00:17:02:F1:53",
      "nsg-ids": [],
      "private-ip": "100.10.10.227",
      "public-ip": null,
      "skip-source-dest-check": false,
      "subnet-id": "ocid1.subnet.oc1.ap-mumbai-1.aaaaaaaaa2s7zfva3efszqdlacsel7pg2doxcc5yhqt4xt25jrzah5e6ntbq",
      "time-created": "2022-08-23T12:08:41.807000+00:00",
      "vlan-id": null
    },
    {
      "availability-domain": "ucJX:AP-MUMBAI-1-AD-1",
      "compartment-id": "ocid1.tenancy.oc1..aaaaaaaaqtzldjhvlvbaoheda67fuwkaldini7h6txiglp7yrx2nc4pm3nka",
      "defined-tags": {
        "Oracle-Tags": {
          "CreatedBy": "oracleidentitycloudservice/abcd@gmail.com",
          "CreatedOn": "2022-08-21T16:40:37.685Z"
        }
      },
      "display-name": "test",
      "freeform-tags": {},
      "hostname-label": "test",
      "id": "ocid1.vnic.oc1.ap-mumbai-1.abrg6ljriaxzes5wtacij7lwhcihv72sva3s5od5ngo6i4v6kv4d6zamypza", …
Run Code Online (Sandbox Code Playgroud)

linux grep awk shell-script json

2
推荐指数
1
解决办法
1573
查看次数

替换 json 的值

我有一个很大的 json 文件,我将该文件的两个部分放在下面。

[
      {
        "description": null,
        "icmp-options": null,
        "is-stateless": false,
        "protocol": "17",
        "source": "1.0.0.0/8",
        "source-type": "CIDR_BLOCK",
        "tcp-options": null,
        "udp-options": {
          "destination-port-range": null,
          "source-port-range": {
            "max": 1433,
            "min": 521
          }
        }
      },
      {
        "description": null,
        "icmp-options": null,
        "is-stateless": false,
        "protocol": "17",
        "source": "1.0.0.0/8",
        "source-type": "CIDR_BLOCK",
        "tcp-options": null,
        "udp-options": {
          "destination-port-range": null,
          "source-port-range": {
            "max": 1899,
            "min": 1435
          }
        }
      }
]
Run Code Online (Sandbox Code Playgroud)

我想更改目标端口范围值,如下所示

  "destination-port-range": {
    "max": 100,
    "min": 90
  },
Run Code Online (Sandbox Code Playgroud)

由于 json 文件非常大,有人可以帮助我如何使用 jq 或任何其他方法来完成此操作?

linux sed awk json jq

2
推荐指数
1
解决办法
763
查看次数

文本文件转 JSON

我有一个文本文件IP:PORT,例如

1.1.1.1:1919
2.2.2.2:111
1.1.1.1:987
Run Code Online (Sandbox Code Playgroud)

我需要在 JSON 格式的脚本中使用它们:

async def main(loop):
    servers = [{
        "address": "ip",
        "port": port
    }, {
        "address": "ip",
        "port": port
    }]
Run Code Online (Sandbox Code Playgroud)

我需要输出为

async def main(loop):
    servers = [{
        "address": "1.1.1.1",
        "port": 1919
    }, {
        "address": "2.2.2.2,
        "port": 111
    }, {
        "address": "1.1.1.1,
        "port": 987
    }]
Run Code Online (Sandbox Code Playgroud)

我正在使用Linux。

text-processing json jq

2
推荐指数
1
解决办法
567
查看次数

删除文件中的公共行

我有两个文件fileAfileB

fileA 有很多 IP,而 fileB 有较少 IP。我们该怎么办

fileA - fileB = fileC(没有公共 IP 的文件)

文件A

1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
Run Code Online (Sandbox Code Playgroud)

文件B

4.4.4.4
1.1.1.1
Run Code Online (Sandbox Code Playgroud)

文件C

2.2.2.2
3.3.3.3
5.5.5.5
Run Code Online (Sandbox Code Playgroud)

我在谷歌上有很多选择,但找不到任何相关的东西

linux sed awk

0
推荐指数
1
解决办法
167
查看次数

将 json 值保存为变量

我从命令中得到以下输出。

{
  "data": {
    "access-type": "ObjectRead",
    "access-uri": "/p/u4yRbnS_Yv29ivICXNWz-76BAgBqfln0SthBVYLZ3AdPOs9BKTQEH48MZEJNvXaT/n/bmjx6wj24zrv/b/season5/o/abcd.zip",
    "bucket-listing-action": null,
    "id": "tePBaSkrsUEBY+rKK0HiwraPn76TLD86BOsqm7dr3cqjNXp6026BouTf9kQoKzZk:abcd.zip",
    "name": "abcd.zip",
    "object-name": "abcd.zip",
    "time-created": "2022-10-27T02:20:17.430000+00:00",
    "time-expires": "2023-02-01T00:00:00+00:00"
  }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我提取access-uri的值根据上面的示例,输出应该是

/p/u4yRbnS_Yv29ivICXNWz-76BAgBqfln0SthBVYLZ3AdPOs9BKTQEH48MZEJNvXaT/n/bmjx6wj24zrv/b/season5/o/abcd.zip
Run Code Online (Sandbox Code Playgroud)

json jq

0
推荐指数
1
解决办法
955
查看次数

将同一命令的每个输出保存在不同的变量中

#!/bin/bash

SERVERLABEL=( 11011-22022 33033-44044-10101 55055-10001-20002 )

    for vmlabel in "${SERVERLABEL[@]}"
    do 
        linode-cli linodes list | grep $vmlabel | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
    done
Run Code Online (Sandbox Code Playgroud)

上面是我的脚本。我想要做的是将每个虚拟机的 ipv4 保存在不同的环境变量中,例如

ipv4_11011-22022
ipv4_33033-44044-10101
ipv4_55055-10001-20002
Run Code Online (Sandbox Code Playgroud)

我是 bash 脚本新手,有人可以帮助我吗

bash shell-script environment-variables

0
推荐指数
1
解决办法
84
查看次数