Swift 包
Swift Package Manager
安装
Mac + Linux

Scout

此库旨在简化特定格式的数据值的读取和写入,尤其是在构建时数据格式未知的情况下。它的灵感来自 SwiftyJson 以及之后的所有项目,同时尝试覆盖更多领域,例如 Xml 或 Plist。它统一了这些不同格式的写入和读取。以 Json 格式获取值与以 Xml 格式获取值相同。

支持的格式

最低要求

概要

Wiki

Swift wiki 可以在 Github 页面上找到。 命令行 wiki 可以在 Woody's Findings 上找到。

新闻

为什么?

使用 Foundation 库来编码/解码 Json 和 Plist,有人可能会问:为什么需要 Scout? 简单的答案:仍然存在您不知道数据格式的情况。 有时,您只想从 Plist 文件中读取单个值,并且您不想创建 struct 来解码此文件。 或者您根本无法在构建时知道数据格式。

背景

我最近一直在与许多 Mac 管理员合作,许多人不得不处理 Json、Plist 和 Xml 数据。 虽然有些人使用特定格式的库,例如 jq 来解析 Json,但其他人则使用 awk。 每种方法都是有效的,但都存在一些缺点。

使用特定格式的库

您可以为每种格式使用一个库。 但我今天不知道有一个库可以将它们全部统一起来。 因此,您通过 jq 学习到的内容无法重用于解析 Plist 数据。 您必须学习使用 PlistBuddydefaults 命令。 使用 Scout,您可以以相同的方式解析 Json、Plist 和 Xml 数据。

使用通用文本处理工具

不要误会我的意思,awk 是一个很棒的工具。 它可以做很多事情。 但它并不容易学习。 而且您必须找到一种方法来解析每种不同的格式。 Scout 真的很容易使用


特性

见解

wiki (Swift | 命令行) 提供了有关使用这些功能的更多详细信息。 此外,Playground 文件夹提供了几个命令,可用于使用多种格式的人物文件。 相同的命令可以在此页面上找到。

JSON、Plist 和 XML 数据格式的 CRUD 函数

使用点“.”来索引字典,例如 “dictionary.key”

使用括号中的索引 [index] 来索引数组,例如 “array[index]”。允许使用负索引。

设置键名

设置键名而不是它的值。

尝试强制类型

阻止自动推断类型,并在设置或添加值时尝试强制指定类型。

字典和数组计数

使用 [#] 符号获取字典或数组计数

字典键列表

使用 {#} 符号获取字典键列表。

当数组或字典为空时删除它们

使用 *delete* 命令,可以指定当一个字典或一个数组的所有键也被删除时,该字典或数组也应该被删除。

数组切片

使用 [lower:upper] 语法指定要读取或删除的数组切片。 省略下界 ~ 0,省略上界 ~ 最后一个索引。 支持使用负索引,例如 [-4:-3] 指定从倒数第 5 个到倒数第 3 个元素的切片。 使用负切片,省略上界 ~ 最后一个索引,例如 [-3:] 获取数组的最后 4 个元素。

字典过滤

在井号 '#' 之间指定一个正则表达式来过滤字典的键,例如 people.#h.*# 定位字典 'people' 中所有以 "h" 开头的键。 当一个键完全被正则表达式验证时,它是一个有效的匹配项。

列出路径

可以列出数据中的路径以迭代这些值。 路径可以作为数组在 shell 脚本中检索,以便在循环中使用。 可以过滤此列表以仅定位单个或组值、特定键或值,或从基础开始的路径。

您可以了解更多关于此功能。 此外,还提供了脚本编写配方,其中包含使用此功能的用例。

流或文件输入

使用输入选项 -i | --input 将输入设置为文件,或使用管道将输入设置为最后一个进程/命令输出

scout "path.to.value" -i File.yml -f yaml
# is the same as
cat File | scout "path.to.value" -f yaml

如果存在拼写错误,查找最佳匹配

Scout 使用 Jaro-Winkler 距离来指示哪个键最接近未解析的键。

语法高亮

Scout 在读取或输出(使用 verbose 标志)字典或数组值时会突出显示输出。 这是通过 Lux 库完成的。 您可以使用以下命令尝试它。

curl --silent "https://api.github.com/repos/ABridoux/scout/releases/latest" | scout

另一个示例,使用一个 Playground 文件和以下命令

scout read -i People.plist -f plist "people.Robert.age=2"

在处理大文件时(尽管不建议在终端中输出大文件),突出显示输出可能会导致速度减慢。 可以使用标志 --no-color--nc 停用着色。 当将输出写入文件或通过管道传输程序输出时,这是自动的。

数据格式转换

该库提供了一种从一种支持的格式转换为另一种格式的功能,例如 Plist -> JSON 或 YAML -> XML。 读取或修改数据并将其导出为另一种格式。 了解更多

CSV 导出

在处理数组或数组字典时导出数据。

CSV 导入

将 CSV 输入转换为可用格式之一。 当 CSV 具有命名标题时,使用路径指定应如何构建数据结构(数组、字典)。

Zsh 数组

使用 -e array 选项将一维数组导出到 Zsh 数组,并使用 -e dictionary 选项导出到关联数组。

自定义颜色

您可以指定自己的颜色集,如此处所述。 此外,可以在 Highlight presets folder 中找到 macOS 终端默认样式的一些预设。

折叠

在一定深度级别折叠数组或字典,以使数据更具可读性

命令自动补全

在 shell 上启用自动补全时,使用 scout install-completion-script,然后根据需要使用 source 命令来获取 scout 命令的自动补全。


安装

命令行

Homebrew

使用以下命令。

brew install ABridoux/formulae/scout

它将从最新版本 下载经过公证的可执行文件

下载

您可以从发布页面下载最新版本的可执行文件。 请注意,该可执行文件已通过公证。 此外,还提供了一个scout 包

解压缩文件后,如果需要,可以安装它。

$ install scout /usr/local/bin/

这是一个命令,它下载最新版本的程序并将其安装在 /usr/local/bin 中。 运行它来下载并安装最新版本的程序。 它会擦除您可能拥有的当前版本。 最后一行是可选的,用于安装自动补全命令的脚本。

curl -LO https://github.com/ABridoux/scout/releases/latest/download/scout.zip && \
unzip scout.zip && \
rm scout.zip && \
install scout /usr/local/bin && \
rm scout
注意

自动补全

您可以运行 scout install-completion-script 来安装脚本,以根据您的 shell 自动补全命令。 在执行此命令后,您可能需要运行 source 命令,以使更改生效。

Bash: source ~/.bashrc
Zsh: source ~/.zshrc

Swift 包

首先,在您的文件 Packages.swift 中导入该包。

let package = Package (
    ...
    dependencies: [
        .package(url: "https://github.com/ABridoux/scout", from: "3.0.0")
    ],
    ...
)

然后您可以在文件中 import Scout


用法

Playground

您可以在Playground 文件夹中使用不同的可用格式查找并尝试一个文件 People 的示例。 该文件夹包含一个 Commands.md 文件,以便您可以了解如何对不同的格式使用相同的命令。

特别感谢

首先,非常感谢该库的所有贡献者。 他们的帮助非常感谢。

为了解析和编辑 XML 数据,由于标准库没有提供一种简单的方法来做到这一点,Scout 使用了 Marko Tadić 的出色库:AEXML。 他做了了不起的工作。 即使今天存在几个 XML 解析和写入库,我绝对会推荐他的库。 Marko,您可能永远不会阅读这些文字,但谢谢您! Yams 及其贡献者也是如此。 感谢你们的这个项目。

还要感谢 Apple 背后 ArgumentParser 库的团队。 他们为了使 Swift 中的命令行工具易于实现而做了令人难以置信的工作。

最后,感谢 Thijs XhaflaireArmin Briegel 他们的想法和有用的反馈。

参考

Logo 使用的字体:Ver Army,作者:Damien Gosset


贡献

Scout 是开源项目,基于 MIT 许可协议。 如果您想进行更改或添加新功能,请提出 issue发起 pull request。 您可以在此 wiki 页面上了解更多有关贡献的信息。 此外,欢迎您报告错误、错误或甚至是错别字