命令与脚本:文本处理与检索 · 查询与转换 JSON、YAML 和结构化输出
查询与转换 JSON、YAML 和结构化输出
处理 JSON 从 jq 开始;JSONPath 查询见 ajson,偏好 Python 表达式可看 jello。yq 的 v3 与 v4 示例必须按已安装版本选择。
jq · 一个使用特定领域语言(DSL)的 JSON 处理器
- 使用
jq二进制执行特定的表达式(打印出彩色和格式化的 JSON 输出):
bash
jq '.' {{路径/到/文件.json}}- 执行特定的脚本:
bash
{{cat 路径/到/文件.json}} | jq {{[-f|--from-file]}} {{路径/到/脚本.jq}}- 传递特定的参数:
bash
{{cat 路径/到/文件.json}} | jq {{--arg "name1" "value1" --arg "name2" "value2" ...}} '{{. + $ARGS.named}}'- 通过来自多个文件的旧 JSON 对象创建新的 JSON 对象:
bash
{{cat 路径/到/多个_json_文件_*.json}} | jq '{{{newKey1: .key1, newKey2: .key2.nestedKey, ...}}}'- 打印特定的数组项:
bash
{{cat 路径/到/文件.json}} | jq '{{.[索引1], .[索引2], ...}}'- 打印所有数组/对象中的值:
bash
{{cat 路径/到/文件.json}} | jq '.[]'- 打印具有双条件过滤的数组对象:
bash
{{cat 路径/到/文件.json}} | jq '.[] | select((.key1=="value1") and .key2=="value2")'- 添加/移除特定的键:
bash
{{cat 路径/到/文件.json}} | jq '. {{+|-}} {{{"key1": "value1", "key2": "value2", ...}}}'yq · 一个轻量级且可移植的命令行 YAML 处理器
- 以漂亮打印格式输出 YAML 文件(v4+):
bash
yq eval {{路径/到/file.yaml}}- 以漂亮打印格式输出 YAML 文件(v3):
bash
yq read {{路径/到/file.yaml}} {{[-C|--colors]}}- 输出仅包含数组的 YAML 文件中的第一个元素(v4+):
bash
yq eval '.[0]' {{路径/到/file.yaml}}- 输出仅包含数组的 YAML 文件中的第一个元素(v3):
bash
yq read {{路径/到/file.yaml}} '[0]'- 在文件中设置(或覆盖)键的值(v4+):
bash
yq eval '.{{键}} = "{{值}}"' {{[-i|--inplace]}} {{路径/到/file.yaml}}- 在文件中设置(或覆盖)键的值(v3):
bash
yq write {{[-i|--inplace]}} {{路径/到/file.yaml}} '{{键}}' '{{值}}'- 合并两个文件并打印到
stdout(v4+):
bash
yq eval-all 'select(filename == "{{路径/到/file1.yaml}}") * select(filename == "{{路径/到/file2.yaml}}")' {{路径/到/file1.yaml}} {{路径/到/file2.yaml}}- 合并两个文件并打印到
stdout(v3):
bash
yq merge {{路径/到/file1.yaml}} {{路径/到/file2.yaml}} {{[-C|--colors]}}ajson · 对 JSON 对象执行 JSONPath 操作
- 从文件中读取 JSON 并执行指定的 JSONPath 表达式:
bash
ajson '{{$..json[?(@.path)]}}' {{路径/到/文件.json}}- 从标准输入中读取 JSON 并执行指定的 JSONPath 表达式:
bash
cat {{路径/到/文件.json}} | ajson '{{$..json[?(@.path)]}}'- 从 URL 中获取 JSON 并计算指定的 JSONPath 表达式:
bash
ajson '{{avg($..price)}}' '{{https://example.com/api/}}'- 读取一些简单的 JSON 并计算一个值:
bash
echo '{{3}}' | ajson '{{2 * pi * $}}'jello · 一个使用 Python 语法的命令行 JSON 处理器
- 将
stdin中的 JSON 或 JSON-Lines 数据进行美化打印到stdout:
bash
cat {{文件.json}} | jello- 输出
stdin中的 JSON 或 JSON Lines 数据的模式到stdout(对 grep 有用):
bash
cat {{文件.json}} | jello -s- 输出
stdin中数组的所有元素(或对象的所有值)为 JSON 或 JSON-Lines 数据到stdout:
bash
cat {{文件.json}} | jello -l- 输出
stdin中的 JSON 或 JSON-Lines 数据的第一个元素到stdout:
bash
cat {{文件.json}} | jello _[0]- 输出
stdin中 JSON 或 JSON-Lines 数据中每个元素的给定键的值到stdout:
bash
cat {{文件.json}} | jello '[i.{{键名}} for i in _]'- 输出多个键的值作为新的 JSON 对象(假设输入 JSON 拥有键
key_name1和key_name2):
bash
cat {{文件.json}} | jello '{{{"键1": _.键名1, "键2": _.键名2, ...}}}'- 输出给定键的值为字符串(并禁用 JSON 输出):
bash
cat {{文件.json}} | jello -r '"{{一些文本}}: " + _.{{键名}}'jc · 将多个命令的输出转换为 JSON
- 通过管道将命令输出转换为 JSON:
bash
{{ifconfig}} | jc {{--ifconfig}}- 通过魔术语法将命令输出转换为 JSON:
bash
jc {{ifconfig}}- 通过管道输出格式化的 JSON:
bash
{{ifconfig}} | jc {{--ifconfig}} {{[-p|--pretty]}}- 通过魔术语法输出格式化的 JSON:
bash
jc {{[-p|--pretty]}} {{ifconfig}}jtbl · 用于在终端中将 JSON 和 JSON Lines 数据打印为表格的工具
- 从 JSON 或 JSON Lines 输入中打印表格:
bash
cat {{文件.json}} | jtbl- 打印表格并指定用于换行的列宽:
bash
cat {{文件.json}} | jtbl --cols={{宽度}}- 打印表格并截断行而不是换行:
bash
cat {{文件.json}} | jtbl {{[-t|--truncate]}}- 打印表格并不换行或截断行:
bash
cat {{文件.json}} | jtbl {{[-n|--no-wrap]}}json5 · 将 JSON5 文件转换为 JSON
更多信息:https://json5.org/#cli。
- 将 JSON5
标准输入转换为 JSON 并输出到标准输出:
bash
echo {{输入}} | json5- 将 JSON5 文件转换为 JSON 并输出到
标准输出:
bash
json5 {{路径/到/输入文件.json5}}- 将 JSON5 文件转换为指定的 JSON 文件:
bash
json5 {{路径/到/输入文件.json5}} {{[-o|--out-file]}} {{路径/到/输出文件.json}}- 验证一个 JSON5 文件:
bash
json5 {{路径/到/输入文件.json5}} {{[-v|--validate]}}- 指定缩进的空格数(或使用 "t" 表示制表符):
bash
json5 {{[-s|--space]}} {{缩进量}}- 显示帮助:
bash
json5 {{[-h|--help]}}zek · 从 XML 生成一个 Go 结构体
- 从
stdin中给定的 XML 生成一个 Go 结构体,并将输出显示在stdout上:
bash
cat {{路径/到/输入.xml}} | zek- 从
stdin中给定的 XML 生成一个 Go 结构体,并将输出发送到文件:
bash
curl {{[-s|--silent]}} {{https://url/to/xml}} | zek -o {{路径/到/输出.go}}- 从
stdin中给定的 XML 生成一个示例 Go 程序,并将输出发送到文件:
bash
cat {{路径/到/输入.xml}} | zek -p -o {{路径/到/输出.go}}jwt · 使用 JSON Web Tokens (JWTs) 进行操作
可用的签名或消息认证算法包括 HS256、HS384、HS512、RS256、RS384、RS512、ES256、ES384。 更多信息:https://github.com/mike-engel/jwt-cli。
- 解码一个 JWT:
bash
jwt decode {{jwt字符串}}- 将 JWT 解码为 JSON 字符串:
bash
jwt decode {{[-j|--json]}} {{jwt字符串}}- 将 JSON 字符串编码为 JWT:
bash
jwt encode {{[-A|--alg]}} {{HS256}} {{[-S|--secret]}} {{1234567890}} '{{json字符串}}'- 将键值对载荷编码为 JWT:
bash
jwt encode {{[-A|--alg]}} {{HS256}} {{[-S|--secret]}} {{1234567890}} {{[-P|--payload]}} {{键=值}}jupytext · 将 Jupyter 笔记本转换为纯文本文件,然后再转换回去
更多信息:https://jupytext.readthedocs.io/en/latest/using-cli.html。
- 将笔记本转换为成对的
.ipynb/.py笔记本:
bash
jupytext --set-formats ipynb,py {{notebook}}.ipynb- 将笔记本转换为
.py文件:
bash
jupytext --to py {{notebook}}.ipynb- 将
.py文件转换为没有输出的笔记本:
bash
jupytext --to notebook {{notebook}}.py- 将
.md文件转换为笔记本并运行它:
bash
jupytext --to notebook --execute {{notebook}}.md- 更新笔记本中的输入单元格并保留输出和元数据:
bash
jupytext --update --to notebook {{notebook}}.py- 更新笔记本的所有配对表示:
bash
jupytext {{[-s|--sync]}} {{notebook}}.ipynb继续阅读
- 文件与文本处理完整实践与解答
- 文件与文本处理上手与对象
- 文件与文本处理任务与配置