2017-03-10 52 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 
相關問題