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 次下载
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