在編寫shell腳本時,如何在單行字符串中提取特定鍵的所有值,該行字符串是元組列表?例如,我的字符串是:在shell腳本中以列表格式抽取單行字符串中的值
[{"key1":"value1", "key2":"value2"},{"key1":"val1","key2":"val2"}]
和輸出應該是含有value1
和val1
陣列。
在編寫shell腳本時,如何在單行字符串中提取特定鍵的所有值,該行字符串是元組列表?例如,我的字符串是:在shell腳本中以列表格式抽取單行字符串中的值
[{"key1":"value1", "key2":"value2"},{"key1":"val1","key2":"val2"}]
和輸出應該是含有value1
和val1
陣列。
這比使用真正的解析器要脆弱得多,所以你可能會發現從長遠來看下載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"
]
下面是基於一個脆弱的方法根據一系列關於你的輸入包含什麼的假設您向我們展示的樣品:
$ awk -F'[":]+' -v k="key1" '{for (i=2;i<=NF;i+=3) if ($i==k) print $(i+1)}' file
value1
val1
請顯示您的努力。看看'jq'。 – codeforester
我不能使用jq,我必須使用本機Linux命令。 –
什麼是「本地Linux命令」爲您的目的? 'jq'肯定存在於linux中,它顯然是嘗試解析json的正確工具。 –