2017-03-10 78 views
0

在编写shell脚本时,如何在单行字符串中提取特定键的所有值,该行字符串是元组列表?例如,我的字符串是:在shell脚本中以列表格式抽取单行字符串中的值

[{"key1":"value1", "key2":"value2"},{"key1":"val1","key2":"val2"}] 

和输出应该是含有value1val1阵列。

+0

请显示您的努力。看看'jq'。 – codeforester

+0

我不能使用jq,我必须使用本机Linux命令。 –

+3

什么是“本地Linux命令”为您的目的? 'jq'肯定存在于linux中,它显然是尝试解析json的正确工具。 –

回答

1

这比使用真正的解析器要脆弱得多,所以你可能会发现从长远来看下载jq可能是值得的,但是如果你只想使用grep,因为你在Ubuntu上你应该有GNU grep和可以做你给串了以下内容:

grep -Po 'key1":"\K[^"]+' 

它使用-P使用Perl风格的正则表达式中,-o只显示匹配的部分。我们在模式中添加\K,以便它之前的所有内容都不会计入匹配的一部分。

所以你输入我做到以下几点:

$ printf '[{"key1":"value1", "key2":"value2"},{"key1":"val1","key2":"val2"}]' | grep -Po 'key1":"\K[^"]+' 
value1 
val1 

与此相比,jq实际上理解JSON:

jq '[ .[] | .["key1"] ]' 

输出:

[                         
    "value1", 
    "val1" 
] 
1

下面是基于一个脆弱的方法根据一系列关于你的输入包含什么的假设您向我们展示的样品:

$ awk -F'[":]+' -v k="key1" '{for (i=2;i<=NF;i+=3) if ($i==k) print $(i+1)}' file 
value1 
val1 
相关问题