Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
我尝试在bash脚本中基于json的另一个键检索键的值,而不使用jq_Json_Bash_Awk_Sed_Grep - Fatal编程技术网

我尝试在bash脚本中基于json的另一个键检索键的值,而不使用jq

我尝试在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" }, {

我有一个json文件,需要根据同一json中“Id”字段的值从json中检索名称。我需要用bash脚本来实现这一点。我可以使用
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

假设两行始终相邻,GNU
grep
管道(在函数中)可以工作:

输出:

"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"