所以我有这个json文件,它是上一个命令的输出:
{
"upload": {
"status": "INITIALIZED",
"contentType": "application/octet-stream",
"name": "mobile.apk",
"created": 1511111178.799,
"url": "https://amazonaws.com/arn%358%3Aproject%3A0030e-0a929/uploads/arn%3Aaws%3??/33bgb",
"type": "ANDROID_APP",
"arn": "arn:aws:devicefarm:us-west-2:588:upload:0000-aaa-bg01-11ab11/1feebbb-1a1a"
}
}
我想提取" arn"值,包括引号,所以值:
"arn:aws:devicefarm:us-west-2:588:upload:0000-aaa-bg01-11ab11/1feebbb-1a1a"
应该退回。我还需要一个单独的命令来提取url值,因此需要返回以下内容:
"https://amazonaws.com/arn%358%3Aproject%3A0030e-0a929/uploads/arn%3Aaws%3??/33bgb"
所以我需要为这些值分别使用2个命令。我已经尝试了grep的所有不同组合,但我还没有任何工作要做。
我只想使用grep命令,我的情况不允许安装任何工具。
谢谢!
答案 0 :(得分:1)
有几种可能的解决方案,具体取决于您可以使用的工具集。
让我们假设bash变量JSON
包含您在主题中描述的整个JSON结构。
Bash + Python:
ARN=`echo "$JSON" | python -c "import sys, json; print json.load(sys.stdin)['upload']['arn']"`
URL=`echo "$JSON" | python -c "import sys, json; print json.load(sys.stdin)['upload']['url']"`
Bash + jq:
URL=`echo "$JSON" | jq -r '.upload.url'`
ARN=`echo "$JSON" | jq -r '.upload.arn'`
Bash + grep + awk
URL=`echo "$JSON" | grep -Po '"url":.*?".*?"' | awk '{ print $2 }'`
ARN=`echo "$JSON" | grep -Po '"arn":.*?".*?"' | awk '{ print $2 }'`
现在你可以做到
echo "$ARN"
echo "$URL"
但正如其他人已经提到的那样,不要使用awk,grep,sed和任何其他工具进行文本处理。使用专用工具。