Linux 提取2个子字符串之间的子字符串
在Bash中,我有一个变量,其中包含一个JSON对象作为字符串,例如:Linux 提取2个子字符串之间的子字符串,linux,string,bash,sed,grep,Linux,String,Bash,Sed,Grep,在Bash中,我有一个变量,其中包含一个JSON对象作为字符串,例如: {“结果”:[{“名称”:“blah-1”,“版本”:“1.0”},{“名称”:“其他名称”,“版本”:“2b alpha”}]} 我是通过打电话给curl得到这个消息的 我想将版本字符串放入bash数组中,这样当我调用printf'%s\n'${versions[@]}“时,它会逐行打印每个版本字符串: 1.0 2b-alpha 这些版本字符串在JSON中的出现次数可以任意。我将如何执行此操作,可以使用纯bash完成,还
{“结果”:[{“名称”:“blah-1”,“版本”:“1.0”},{“名称”:“其他名称”,“版本”:“2b alpha”}]}
我是通过打电话给curl
得到这个消息的
我想将版本字符串放入bash数组中,这样当我调用printf'%s\n'${versions[@]}“
时,它会逐行打印每个版本字符串:
1.0
2b-alpha
这些版本字符串在JSON中的出现次数可以任意。我将如何执行此操作,可以使用纯bash完成,还是需要grep
或sed
以及该命令是什么样子的?单向:
arr=($(echo "$x" | grep -oP '(?<="Version":")[^"]+' ))
单向:
arr=($(echo "$x" | grep -oP '(?<="Version":")[^"]+' ))
正如建议的那样,使用适当的JSON
解析器(如jq
)进行解析,以获得更好的可维护性。做点像
$ echo "$jsonString" | jq -r '.results[] | "\(.Version)"'
应将内容打印为
1.0
2b-alpha
printf '%s\n' "${jsonArray[@]}"
其思想是使用jq
过滤器.results[]|“\(.Version)”
选择结果下的所有节点,并提取结果下的Version
的所有名称
要将其存储到数组,请使用
有关下载说明,请参阅第页。根据建议,使用适当的JSON
解析器,如jq
进行解析,以提高可维护性。做点像
$ echo "$jsonString" | jq -r '.results[] | "\(.Version)"'
应将内容打印为
1.0
2b-alpha
printf '%s\n' "${jsonArray[@]}"
其思想是使用jq
过滤器.results[]|“\(.Version)”
选择结果下的所有节点,并提取结果下的Version
的所有名称
要将其存储到数组,请使用
有关下载说明,请参阅第页。如果只需要版本号,则不需要将curl的结果存储在变量中。您可以将curl的结果直接导入jq:
versions=($(curl 'http://server/path' | jq -r '.results[].Version'))
如果只需要版本号,则不需要将curl的结果存储在变量中。您可以将curl的结果直接导入jq:
versions=($(curl 'http://server/path' | jq -r '.results[].Version'))
如果要解析json,请使用json解析器。如果你想得够久,你就会意识到它是合乎逻辑的,是有道理的。使用
jq
解析json
如果你想解析json,就使用json解析器。如果你想得够久,你就会意识到它是合乎逻辑的,是有道理的。使用jq
解析json
你可以使用.results[].Version
你可以使用.results[].Version