linux - 提取 2 个子串之间的子串

标签 linux string bash sed grep

在 Bash 中我有一个包含 JSON 对象作为字符串的变量,例如:

{"results":[{"Name":"blah-1","Version":"1.0"},{"Name":"Some Other Name","Version":"2b- alpha"}]}

我是通过调用 curl 得到的。

我想将版本字符串放入 bash 数组中,这样当我调用 printf '%s\n' "${versions[@]}" 时,它会打印每个版本字符串行行:

1.0
2b-alpha

JSON 中可以出现任意数量的这些版本字符串。我该怎么做,可以用纯 bash 来完成还是我需要 grepsed 以及命令是什么样的?

最佳答案

作为gniourf-gniourf建议使用合适的 JSON 解析器,如 jq 进行解析,以获得更好的可维护性。做类似的事情

$ echo "$jsonString" | jq -r '.results[] | "\(.Version)"'

应该将内容打印为

1.0
2b-alpha

思路是jq过滤器.results[] | "\(.Version)"选择result下的所有节点,提取出其下所有Version的名称。

要将其存储到数组中,请使用 process-substitution作为,

read -r -a jsonArray < <(echo "$jsonString" | jq -r '.results[] | "\(.Version)"')

并将数组内容打印为

printf '%s\n' "${jsonArray[@]}"

引用GitHub-jq-documentation下载说明页面。

关于linux - 提取 2 个子串之间的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41358533/

相关文章:

linux - 终端输出异常

linux - Chef 版本不匹配

Linux gretap - net/ipv4/ip_gre.c - 如何设置 key->tun_flags 的值

mysql - 在 MySQL 中对日期使用字符串数据类型而不是使用日期时间数据类型是个好主意吗?

python - 如何在 Python 中使用 os.getcwd() 向 Maya 正确发送命令

bash - 如何使用&&将多个命令传递给bash中的单个命令?

linux - Apache 日志 : Count top 10 URLs by bytes served

c - ubuntu 上的信号处理 C 编程

c++ - 最大长度的字符串前缀同构

python - 猫 : invalid option -- 'F' error trying to run linux command from python subprocess