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