【问题标题】:How to get first one "id" in a JSON using sed in shell script?如何在 shell 脚本中使用 sed 在 JSON 中获取第一个“id”?
【发布时间】:2021-10-31 22:31:13
【问题描述】:
'''[ {
        "id": "**49b18e99-7516-4c9a-8e1a-9d28f470512**",
        "name": "Name",
        "appId": "",
        "publishTime": "2020-05-17",
        "published": true,
        "stream": {
            "id": "aaec8d41-5201-43ab809f-3063750dffff",
            "name": "name",
            "privileges": null
        },
        "savedInProductVersion": "12.0",
        "migrationHash": "qewjhjkw-djqwhndj",
        "availabilityStatus": 1,
        "privileges": null
    }, {
    "id": "**59b18e99-7516-4c9a-8e1a-9d28f4705123**",
    "name": "Name",
    "appId": "",
    "publishTime": "2020-05-17",
    "published": true,
    "stream": {
        "id": "abec8d41-5201-43ab809f-3063750deeee",
        "name": "name",
        "privileges": null
    },
    "savedInProductVersion": "12.0",
    "migrationHash": "qewjhjkw-djqwhndj",
    "availabilityStatus": 1,
    "privileges": null
}

    ]'''

我想要这个 49b18e99-7516-4c9a-8e1a-9d28f470512 和 59b18e99-7516-4c9a-8e1a-9d28f4705123 ,但使用“sed -n 's|.*"id":"\([^"]*\)".*|\1|p'” 我正进入(状态 49b18e99-7516-4c9a-8e1a-9d28f470512, aaec8d41-5201-43ab809f-3063750dffff, 59b18e99-7516-4c9a-8e1a-9d28f4705123, abec8d41-5201-43ab809f-3063750deeee 如果文件有多个像上面给出的 json 对象。 那么请帮我找到上面只使用 sed 的最佳命令。

【问题讨论】:

  • 必须是sed吗?使用起来更简单:jq '.[].id
  • 但由于一些限制,我需要使用“sed”。任何帮助将不胜感激

标签: shell unix awk sed


【解决方案1】:

使用任何 POSIX awk:

awk '
    /{ *$/ { depth++ }
    /^ *}/ { depth-- }
    (depth == 1) && sub(/^[[:space:]]*"id": *"/,"") && sub(/", *$/,"")
' file
**49b18e99-7516-4c9a-8e1a-9d28f470512**
**59b18e99-7516-4c9a-8e1a-9d28f4705123**

【讨论】:

  • @Ed Morton 感谢您抽出宝贵时间,是的,它正在按我的意愿工作。
【解决方案2】:

使用 GNU awk 和您展示的示例,请尝试遵循 awk 代码。用 GNU awk 编写和测试。简单的解释是,将 RS 设置为 "id":[ 直到第一次出现 }。然后使用match 函数通过使用正则表达式"id":[[:space:]]+"[^"]* 匹配OP 所需的确切值,然后打印值。

awk -v RS='"id":[^}]*' '
match(RT,/"id":[[:space:]]+"[^"]*/){
  val=substr(RT,RSTART,RLENGTH)
  sub(/.*"/,"",val)
  print val
}
' Input_file

【讨论】:

  • 感谢这次,您的代码也可以按我的意愿运行。
猜你喜欢
  • 2023-03-16
  • 2016-01-18
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
相关资源
最近更新 更多