【问题标题】:How to use regular with Shell script如何在 Shell 脚本中使用正则
【发布时间】:2020-08-31 23:36:16
【问题描述】:

运行

curl http://localhost:3000/

我会得到这样的数组输出

[
  {
    "name": "name1",
    "wred": {
      "lsd": "8040baf7aded3319b0dec433b2461"
    },
    "node": "dfsafafafaf="
  },
  {
    "name": "name2",
    "wred": {
      "lsd": "e6b3a11581a800d"
    },
    "node": "fdsafzxcvx="
  },
  {
    "name": "name3",
    "wred": {
      "lsd": "d3319b0dec433b2461"
    },
    "node": "hlkkjjkhjas="
  }
]

我想通过 Shell 脚本获取name1

#!/bin/bash
get_name() {
  curl --silent "http://localhost:3000/" |
  grep '"name":' |
  sed -E 's/.*"([^"]+)".*/\1/'                                 
}
echo `get_name`

我得到这样的结果

name1 name2 name3

请帮助我,非常感谢。

【问题讨论】:

  • 不要使用 RegEx 解析 JSON,而是使用适当的解析器
  • 这能回答你的问题吗? Parsing JSON with Unix tools
  • @Cid 不,我不想使用 JSON。
  • 你已经在使用 JSON

标签: json shell sed


【解决方案1】:

以 JSON 格式输出 curl。使用jq 工具提取。虽然从技术上讲,您可以使用 sed 处理一些 JSON 文件,但这是有风险的:sed 是面向行的,而 JSON 是结构化的。无法保证 JSON 文件将以特定方式格式化。

curl ... | jq -r '.[0].name' 

执行“man jq”以获取完整信息。简洁版本: * '.[0]' 将选择数组的第一个条目 * 'name' 选择名称元素 * '-r' 产生'原始' 输出 - 去掉引号。

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2010-12-10
    • 2013-08-17
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多