5 个版本

0.1.4 2023 年 10 月 5 日
0.1.3 2023 年 10 月 2 日
0.1.2 2023 年 9 月 29 日
0.1.1 2023 年 9 月 29 日
0.1.0 2023 年 9 月 29 日

#1893解析器实现

每月 42 次下载

BSD-3-Clause

35KB
1K SLoC

Structs,数据结构服务

Structs 是一个用于在 shell 脚本中交互式处理结构化数据的工具。Structs 允许你解析一些 JSON,在内存中维护数据结构,并以自然的方式随意访问字段。在 shell 脚本中还有其他完成此任务的方法,但它们通常相当笨拙。

定义数据结构

可以通过 set 操作定义数据结构。新创建的结构的关键字将被打印出来,并可用于获取数据。

$ structs set
{
  "numbers": {
    "one": {
        "cardinal": 1,
        "ordinal": "1st"
    },
    "two": {
        "cardinal": 2,
        "ordinal": "2nd"
    },
    "three": {
        "cardinal": 3,
        "ordinal": "3rd"
    }
  }
}
^D
woh7iu3tieB0

获取结构

可以使用其关键字获取整个数据结构,或者使用常见的点表示法引用其字段。

$ structs get woh7iu3tieB0
{"numbers":{"one":{"cardinal":1,"ordinal":"1st"},"two":{"cardinal":2,"ordinal":"2nd"},"three":{"cardinal":3,"ordinal":"3rd"}}}

获取子结构

引用一个字段将打印结构的一个子集,并以 JSON 格式表示。

$ structs get woh7iu3tieB0.numbers.two
{"cardinal":2,"ordinal":"2nd"}

与 Jq 协同使用

$ structs get woh7iu3tieB0.numbers.two | jq -r 'map(.) | @csv'
2,"2nd"

获取单个字段

引用原始字段(字符串、数字、布尔值)通常比获取结构更有用。

$ structs get woh7iu3tieB0.numbers.two.ordinal
"2nd"

默认情况下,单个字段以 JSON 格式显示。使用 -r--raw 标志打印字段值而不是其 JSON 表示形式。

$ structs get --raw woh7iu3tieB0.numbers.two.ordinal
2nd

遍历关键字(或索引)

遍历并打印对象或数组中的所有关键字(或索引)。关键字或索引以原始形式打印,适合用作表达式的组成部分。

$ structs range woh7iu3tieB0.numbers
one
two
three

$ for key in $(structs range woh7iu3tieB0.numbers); do echo "Ordinal: $(structs get -r woh7iu3tieB0.numbers.${key}.ordinal)"; done
Ordinal: 1st
Ordinal: 2nd
Ordinal: 3rd

依赖关系

~5–12MB
~147K SLoC