【问题标题】:Split text after a delimiter and store into array在分隔符后拆分文本并存储到数组中
【发布时间】:2018-06-19 09:15:47
【问题描述】:

我想在分隔符 'name":"' 之后的文本中获取 DNS 区域,然后存储到数组中:

[{"id":12,"**name":"43.11.in-addr.arpa**","ttl":1000,"nameserver":"mo.t1.ree.kalou.com.","email":"dns.kalou.com","serial":348,"refresh_time":1000,"negative_ttl":10800},{"id":13,"name":"**58.78.in-addr.arpa**","ttl":100 etc etc

数组的输出:

43.11.in-addr.arpa
58.78.in-addr.arpa

我只是发现在一个分隔符之后拆分,而不是一个单词。

谢谢

【问题讨论】:

  • 如果这是一个 JSON 文本,请使用语法感知解析器对其进行解析,例如 jq

标签: arrays bash text split delimiter


【解决方案1】:

如果你的输入看起来像

your_json_string='[
  {
    "id": 12,
    "name": "43.11.in-addr.arpa",
    "ttl": 1000,
    "nameserver": "mo.t1.ree.kalou.com.",
    "email": "dns.kalou.com",
    "serial": 348,
    "refresh_time": 1000,
    "negative_ttl": 10800
  },
  {
    "id": 13,
    "name": "58.78.in-addr.arpa",
    "ttl": 100
  }
]'

要提取name字段,可以使用jq

jq -r '.[].name' <<< "$your_json_string"

要将值分配给数组,请使用:

my_array=($(jq -r '.[].name' <<< "$your_json_string"))

并可能将其与

之类的东西一起使用
echo ${my_array[0]}

【讨论】:

  • 太好了,不是我如何将输出 jq 存储到 bash 数组中
  • @oliv:请注意,如果cmd 发出包含空格的内容,则此逻辑会中断,即array=( $(cmd) )。认为它不适用于这种情况,但一般不建议推荐这种方法,需要使用mapfile/readarray 或使用read 命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2016-12-18
  • 1970-01-01
  • 2017-03-07
  • 2016-06-04
相关资源
最近更新 更多