【发布时间】:2015-10-14 21:12:00
【问题描述】:
由于某些极端原因,我无法使用 jq 或其他 cli 工具。我需要从匹配这个 puppet metadata.json 的任何 json 中提取“name”的值。格式。
json 可能没有正确格式化和缩进,但会有效。含义、空格和换行符、回车符可能会插入到符合条件的位置。
请注意,依赖项数组中可能有“名称”元素。
那么,如何只使用标准的 unix 命令和/或 shell 脚本来提取值而不安装任何应用程序,如 jq 或其他工具?
谢谢!!
{
"name": "examplecorp-mymodule",
"version": "0.0.1",
"author": "Pat",
"license": "Apache-2.0",
"summary": "A module for a thing",
"source": "https://github.com/examplecorp/examplecorp-mymodule",
"project_page": "https://forge.puppetlabs.com/examplecorp/mymodule",
"issues_url": "https://github.com/examplecorp/examplecorp-mymodule/issues",
"tags": ["things", "stuff"],
"operatingsystem_support": [
{
"operatingsystem":"RedHat",
"operatingsystemrelease":[ "5.0", "6.0" ]
},
{
"operatingsystem": "Ubuntu",
"operatingsystemrelease": [ "12.04", "10.04" ]
}
],
"dependencies": [
{ "name": "puppetlabs/stdlib", "version_requirement": ">=3.2.0 <5.0.0" },
{ "name": "puppetlabs/firewall", "version_requirement": ">= 0.0.4" }
]
}
【问题讨论】:
-
“或其他工具”?你甚至没有 Python 解释器? (您可以使用
python -m json使用单行解析 JSON)。需要明确的是:jq 是普遍建议的,因为 shell 本身不能可靠地做到这一点。可以想出一些技巧,但它们是hacks——意思是没有结构意识,这意味着他们无法正确应对所有可能的极端情况。
标签: json regex shell unix puppet