我想编写一个 bash 脚本来循环遍历数组“certs”。我读到我可以使用jq
包来正确解析 json,但我不想使用任何包。还有其他更简便的方法可以处理这个问题吗?
response = {
"name": "Test",
"certs": ["BSc", "MSc"]
}
答案1
您可以使用sed
以下命令创建数组内容列表:
sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'
这将选择包含字符串“certs”的行,并从中删除数组中除字符串之外的所有内容。您可以使用命令替换将此列表插入到循环中for
:
for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//')
do echo "$i"
done
这将循环遍历所有项目,并将每个项目打印在新行上。
另一种方法sed
是grep
提取列表并tr
删除逗号:
grep -oP 'certs": \[\K.*(?=])' | tr -d ,
示例运行
您提供的示例文本保存在名为“json”的文件中。
$ for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'); do echo "$i"; done
"BSc"
"MSc"