首页 > 解决方案 > 需要修改属于特定值的 json 列表。你能建议我 sed 或 awk 或任何 linux 命令吗?

问题描述

我的json列表如下:

#输入:json列表#

[
        { 
          "Network HW Interface": "NL1A",
          "network_link": 0,
          "default": "true",
          "data": [
          {
             "switch_vlan":1001,
             "range":1
          } 
          ]
        },
        {
          "Network HW Interface": "NL1B",
          "network_link": 1,
          "data": [
          {
             "switch_vlan":2001,
             "range":1
          }
          ]
        },
        {
          "Network HW Interface": "NL2A",
          "network_link": 2,
          "data": [
          {
             "switch_vlan":3001,
             "range":1
          }
          ]
        },
        {
          "Network HW Interface": "NL2B",
          "network_link": 3,
          "data": [
          {
             "switch_vlan":4001,
             "range":1
          }
          ]
        }
] 

我需要修改“网络硬件接口”下“switch_vlan”和“range”的值:“NL2A”如下“switch_vlan”:3005和“range”:3。只有该部分下的值需要修改,如下所示。

#预期输出#

[
        { 
          "Network HW Interface": "NL1A",
          "network_link": 0,
          "default": "true",
          "data": [
          {
             "switch_vlan":1001,
             "range":1
          } 
          ]
        },
        {
          "Network HW Interface": "NL1B",
          "network_link": 1,
          "data": [
          {
             "switch_vlan":2001,
             "range":1
          }
          ]
        },
        {
          "Network HW Interface": "NL2A",
          "network_link": 2,
          "data": [
          {
             "switch_vlan":3005,
             "range":3
          }
          ]
        },
        {
          "Network HW Interface": "NL2B",
          "network_link": 3,
          "data": [
          {
             "switch_vlan":4001,
             "range":1
          }
          ]
        }
] 

我尝试了机器人框架 json 关键字。它没有帮助。然后尝试遵循 sed 命令,这有助于替换该值,但它会影响所有相似的值。

sed -E 's/"switch_vlan":3001,/"switch_vlan":3005/g' file.json > file1.json

sed -E 's/"range":1/"range":3/g' file1.json > file.json

因此,想要检查该特定字段实例的东西:“网络硬件接口”:“NL2A”,并且只会修改该字段下特定键的值。

标签: jsonbashawksedrobotframework

解决方案


使用 sed,您可以选择一系列行来进行替换。我用你的数据对此进行了测试,它奏效了

sed -E '/"Network HW Interface": "NL2A"/,/\]/{
  s/"switch_vlan":3001,/"switch_vlan":3005/g
  s/"range":1/"range":3/g
}' file.json

推荐阅读