Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要修改特定值下的json列表。你能建议我使用sed或awk或任何linux命令吗?_Json_Bash_Awk_Sed_Robotframework - Fatal编程技术网

需要修改特定值下的json列表。你能建议我使用sed或awk或任何linux命令吗?

需要修改特定值下的json列表。你能建议我使用sed或awk或任何linux命令吗?,json,bash,awk,sed,robotframework,Json,Bash,Awk,Sed,Robotframework,我的json列表如下: #输入:json列表# 我需要修改“网络硬件接口”下“交换机虚拟局域网”和“范围”的值:“NL2A”如下“交换机虚拟局域网”:3005和“范围”:3.只有该部分下的值需要修改,如下所示 #预期产量# 我尝试了Robot框架json关键字。这没用。 然后尝试执行sed命令,这有助于替换该值,但会影响所有类似的值 sed -E 's/"switch_vlan":3001,/"switch_vlan":3005/g' file.json

我的json列表如下:

#输入:json列表#

我需要修改“网络硬件接口”下“交换机虚拟局域网”和“范围”的值:“NL2A”如下“交换机虚拟局域网”:3005和“范围”:3.只有该部分下的值需要修改,如下所示

#预期产量#

我尝试了Robot框架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”,并且只会修改该字段下特定键的值。

使用sed,您可以选择一系列行进行替换。我用你的数据测试了这个,它成功了

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

你试过
jq
?是的,也试过jq,但没有修改嵌套json列表的示例,我需要修改的键是json中的另一个列表。我只找到了使用单个键值对或唯一键值对修改json的jq示例。在我的示例中,键不是唯一的,而且键在另一个列表中。这些示例用于给出提示。它们不可能成为人们对信息可能做的所有事情的“A到B”指南。看看这些例子,在这里多读一些,希望你能把满足你需要的东西拼凑在一起。我对你的问题没有现成的答案,但我怀疑你会用
jq
并花一点时间在它上面。阅读上面的评论(关于为什么你第一次尝试使用jq没有成功)让我对你实际上在做什么感到困惑。您能否构建一个能够排除所有与问题无关的因素(并且只包括证明程序正确遵守所需约束所必需的数据部分)?@nanzyn以下jq命令应该满足您的要求,或者至少足够接近您,以便您能够有希望地进行调整:
jq'([]|选择(“网络硬件接口”==“NL2A”)|.data[0])={switch_vlan:3005,range:3}'file.json
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
sed -E '/"Network HW Interface": "NL2A"/,/\]/{
  s/"switch_vlan":3001,/"switch_vlan":3005/g
  s/"range":1/"range":3/g
}' file.json