我尝试在bash脚本中基于json的另一个键检索键的值,而不使用jq
我有一个json文件,需要根据同一json中“Id”字段的值从json中检索名称。我需要用bash脚本来实现这一点。我可以使用我尝试在bash脚本中基于json的另一个键检索键的值,而不使用jq,json,bash,awk,sed,grep,Json,Bash,Awk,Sed,Grep,我有一个json文件,需要根据同一json中“Id”字段的值从json中检索名称。我需要用bash脚本来实现这一点。我可以使用sed,awk,grep,但不能使用jq [ { "attributes":{ "type":"chocolate","url":"/services/chocolate" }, "Id":"1", "Name":"Chocolaty chocloate" }, {
sed
,awk
,grep
,但不能使用jq
[
{
"attributes":{
"type":"chocolate","url":"/services/chocolate"
},
"Id":"1",
"Name":"Chocolaty chocloate"
},
{
"attributes":{
"type":"Fruit","url":"/services/fruit"
},
"Id":"2",
"Name":"Fruity Apple"
},
{
"attributes":{
"type":"drink","url":"/services/drink"
},
"Id":"3",
"Name":"Milk Shake"
},
{
"attributes":{
"type":"food","url":"/services/food"
},
"Id":"4",
"Name":"Noodles"
}
]
在上面的示例中,如果我将值“3”传递给脚本,我希望“Id”的名称带有值“3”,即
奶昔最好的解决方案是使用jq。但是如果它应该是sed,你可以在这里做:
#!/bin/bash
sed -n "/\"Id\":\"$2\"/,/\"Name\"/s/.*\"Name\":\"\([^\"]*\).*/\1/p" "$1"
用法
script.sh file.json 3
输出
Milk Shake
假设两行始终相邻,GNUgrep
管道(在函数中)可以工作:
输出:
"Milk Shake"
我相信你的意思是jq
,而不是jp
。你知道我能做什么吗@InianI建议使用jq
,不要对JSON-awk
,sed
使用jq
的语法分析器。这是作业文本中的任意要求吗?我的意思是,与安装jq
,或使用JSON感知语言编写解决方案相比,使用错误的工具重新实现JSON解析器是一项真正的技术债务,具有非常实际的成本。也许pgrep
可以一次性完成(没有管道)。@Julia,re“…不起作用…”:请提供grep-V | head-1;wc-c file.json
.grep(GNU grep)的输出3.1 27787 file.json—我使用该命令获得的输出@agc@Julia,谢谢,考虑到这个输出,我怀疑file.json是DOS文本文件。请提供file file.json
的输出。file.json:json数据-这是file.json@agcI的输出。它尝试了这个,但没有响应。有什么需要修复的吗?
"Milk Shake"