我的 json.file 看起来像
{
"price1" : "120.10",
"price2" : "110.30",
"price3" : "244.45"
}
我在 bash 脚本中使用了以下 sed 命令来声明从 json 读取的数组
array=( $(sed -n '/{/,/}/{s/[^:]*:[^"]*"\([^"]*\).*/\1/p;}' json.file) )
这给了我echo ${array[*]}
值的输出
120.10 110.10 244.45
我正在寻找我的数组值以包含键名 ( key:value
)。我想要的输出应该是key:value
格式
price1:120.10 price2:110.10 price3:244.45
有人可以帮助或指导我吗?
解析json
withsed
可能是一个坏主意。但让我们假设它是一种超级简单和常规的json
格式。您离工作解决方案不远了:
$ array=($(sed -nr 's/.*"(.*)".*"(.*)".*/\1:\2/p' json.file))
$ echo ${array[*]}
price1:120.10 price2:110.30 price3:244.45
p
替换命令的标志告诉 sed 在匹配时打印结果。很高兴知道。如果您感兴趣的每行只有两个带引号的字符串,它应该可以工作。
如果您想更具体地了解匹配行,则可以。例如:
sed -nr 's/^ "(.*)" : "(.*)",?$/\1:\2/p' json.file
还指定有 2 个前导空格,该列前后各有一个空格,并且在最后一个引号之后和行尾之前有一个可选的逗号。
但也有更简单的:
sed -nr 's/[[:space:]",]//gp' json.file
这只是删除所有空格、双引号和逗号,只打印匹配的行。你猜怎么着?这是你(显然)想要的。
无论如何,请记住,如果您的json
文件比您显示的更复杂,那sed
绝对不是正确的工具。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句