gpt4 book ai didi

json - 使用 BusyBox 工具解析 JSON

转载 作者:行者123 更新时间:2023-12-04 13:21:32 44 4
gpt4 key购买 nike

我正在开发一个可在 Android 上安装的 Hugo 博客主题(通过 Termux 的 BusyBox),并计划创建一个 BusyBox Docker 镜像并将我的主题和 Hugo 二进制文件复制到它以在 ARM 上使用。

主题版本已存档并在 NPM 和 tools available 上提供。在 BusyBox 上,我可以可靠地解析 version来自 JSON 的元数据:

meta=$(wget -qO - https://registry.npmjs.org/package/latest)
vers=$(echo "$meta" | egrep -o "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ')

现在我想复制 dist来自 meta 的值进入一个文本文件以供 Hugo 使用:
"dist": {
"integrity": "sha512-3MH2/UKYPjr+CTC85hWGg/N3GZmSlgBWXzdXHroDfJRnEmcBKkvt1oiadN8gzCCppqCQhwtmengZzg0imm1mtg==",
"shasum": "a159699b1c5fb006a84457fcdf0eb98d72c2eb75",
"tarball": "https://registry.npmjs.org/after-dark/-/after-dark-6.4.1.tgz",
"fileCount": 98,
"unpackedSize": 5338189
},

为清晰起见,上面打印得很漂亮。 actual metadata被压缩。

有什么方法可以重复使用 version上面的解析逻辑也拉出 dist字段值?

最佳答案

正确的健壮解析需要像 jq 这样的工具它可以像 jq '.version' ip.txt 一样简单和 jq '.dist' ip.txt
您可以使用 sed但使用它需要您自担风险

$ sed -n 's/.*"version":"\([^"]*\).*/\1/p' ip.txt
6.4.1

$ sed -n 's/.*\("dist":{[^}]*}\).*/\1/p' ip.txt
"dist":{"integrity":....
....}
  • -n禁用自动打印的选项
  • p修饰符 s命令仅在替换成功时才允许打印,这意味着当出现问题时输出为空而不是整个输入行
  • .*"version":"\([^"]*\).*这将匹配整行,在 version 之后捕获双引号之间的数据标签 - 如果允许空格和其他有效的 json 格式,您必须调整正则表达式
  • .*\("dist":{[^}]*}\).*这将匹配整行,捕获以 "dist":{ 开头的数据第一次出现 }之后 - 所以这不适合如果标签本身可以包含 }
  • 关于json - 使用 BusyBox 工具解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999824/

    44 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com