Lea*_*ner 8 unix linux bash shell sh
我正在尝试通过rest api从artifactory下载artifacts(.war文件)。我正在从 Artifactory 获取 JSON 格式的文件夹名称,我想通过 shell 脚本将其获取到一个变量中,但如果不使用 JSON 工具和 JQ 工具,我就无法做到这一点,因为我的服务器不包含这两者。有人可以帮我解决这些问题吗?
我尝试了以下命令
$ databasename=`cat process.json | json select '.uri'`
$ echo $databasename
Run Code Online (Sandbox Code Playgroud)
和
$ databasename=`jq '.uri' process.json`
Run Code Online (Sandbox Code Playgroud)
由于我没有JQ和JSON工具,所以失败了。
$ curl -u User:API Key https://artifactory.es.abc.com/artifactory/api/storage/abc/com/xyz/aa/bb/xx/?list&listFolders=1&includeRootPath=0 > process.json
$ databasename=`cat process.json | json select '.uri'`
$ echo $databasename
Run Code Online (Sandbox Code Playgroud)
小智 8
更具可读性和易于理解的解决方案是:
cat process.json | tr { '\n' | tr , '\n' | tr } '\n' | grep "uri" | awk -F'"' '{print $4}'
Run Code Online (Sandbox Code Playgroud)
您可以利用grep并sed获取您需要的数据。我本想添加一个完整的示例,但 URL 不正确,并且您没有提供 json(的一部分)。
$ cat tmp.json
{
"json": {
"array": [ 1, 2, 3 ]
},
"uri": "derp"
}
$ grep 'uri' tmp.json | sed -r 's/^[^:]*:(.*)$/\1/'
"derp"
Run Code Online (Sandbox Code Playgroud)
对于单行数据,可以使用以下命令:
echo '{ "uri" : "/abc", "folder" : true },' | grep -Eo '"uri"[^,]*' | grep -Eo '[^:]*$'
Run Code Online (Sandbox Code Playgroud)
第一个 grep 将搜索“uri”及其后的所有内容,直到找到逗号为止,第二个 grep 提取从冒号到字符串末尾的所有内容。