我在配置文件中保存了以下结构(类似JSON格式)。
exampleStruct = {
valueOne = {
irrelevant_key_1 = true;
irrelevant_key_2 = true;
relevant_key = true;
};
valueTwo = {
irrelevant_key_1 = true;
irrelevant_key_2 = true;
relevant_key = true;
};
valueThree = {
irrelevant_key_1 = true;
irrelevant_key_2 = true;
};
valueFour = {
irrelevant_key_1 = true;
relevant_key = true;
};
}
主结构中的结构,即 valueOne , valueTwo 可能有也可能没有“ relevant_key ”作为键。 我想找到以“ relevant_key”为键的结构。 因此,对于上面的示例,我希望将以下列表存储在文件中
valueOne
valueTwo
valueFour
由于 valueThree 没有以“ relevant_key”作为键。
我对编写脚本完全陌生,是否可以使用jq? 我不希望将整个脚本作为答案,但是前进的方向会很有帮助。
谢谢
答案 0 :(得分:1)
首先,您需要将其转换为有效的JSON。这种骗术应该做到:
semiJson=$( printf "{\n%s\n}" "$( sed -E $'s/=/:/g;s/;/,/g;s/([a-zA-Z0-9_]+)/"\\1"/g;s/"true"/True/g' semiJson.sjson )")
okJson=$( python3 -c "
import json
dict = $semiJson
print(json.dumps(dict, indent=' '))
")
一旦有了有效的JSON(在这种情况下为 okJson 变量),您就可以轻松地使用JQ完成您想要的目标:
echo "$okJson" | jq '.exampleStruct | with_entries(select(.value.relevant_key == true)) | keys'
[
"valueFour",
"valueOne",
"valueTwo"
]
让我知道是否有帮助!