jc 解析器实战:将 `update-alternatives --get-selections` 输出转换为 JSON 的 `update-alt-gs` 指南
开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载本指南围绕 jc 项目中的update-alt-gs解析器展开讲解如何把 Linux 下update-alternatives --get-selections命令输出的备选方案alternatives清单转换为结构化 JSON以便接入 jq 等工具链、简化系统配置审计与自动化脚本。读完本文你将掌握该解析器的 CLI 用法、Python 模块调用方式、输出 Schema以及它的底层解析原理与测试验证方法。背景为什么要解析update-alternatives --get-selections在 Debian/Ubuntu 等发行版中update-alternatives用于维护系统中同名命令或文件的符号链接备选方案如editor、awk、cc等。其中update-alternatives --get-selections以纯文本清单形式输出当前所有备选方案的注册名、模式与当前指向路径update-alternatives --query name则输出单个备选方案的详细结构化信息对应 jc 的 update-alt-q 解析器。纯文本清单不便被脚本直接消费jc 的update-alt-gs解析器正是为它量身定制的将每一行转换为{name, status, current}对象最终得到一个 JSON 数组。CLI 用法两种等价调用方式根据文档与 源码模块文档字符串有两种命令行用法方式一管道方式$ update-alternatives --get-selections | jc --update-alt-gs方式二magic 方式直接让 jc 代为执行命令$ jc update-alternatives --get-selections方式二依赖 jc 的 magic command 机制jc在 cli.py 中会把用户给出的命令与各解析器的magic_commands元数据做匹配update-alt-gs解析器注册的 magic command 正是update-alternatives --get-selections见 update_alt_gs.py匹配成功后由 jc 调用subprocess运行该命令并自动解析其标准输出。带-ppretty美化输出$ update-alternatives --get-selections | jc --update-alt-gs -p [ { name: arptables, status: auto, current: /usr/sbin/arptables-nft }, { name: awk, status: auto, current: /usr/bin/gawk } ]Python 模块用法在自动化脚本中直接调用除 CLI 外update-alt-gs也是 jc 的公开解析器之一已注册于 lib.py 的解析器清单可导入jc.parsers.update_alt_gs单独使用或通过统一的jc.parse()入口调用import jc result jc.parse(update-alt-gs, update_alternatives_get_selections_command_output)单独导入解析器模块的方式import jc.parsers.update_alt_gs as my_parser result my_parser.parse(update_alternatives_get_selections_command_output)两种方式返回的都是List[Dict]可直接交给json.dumps()序列化或交给 pandas、jinja2 等下游工具继续处理。输出 Schema 说明解析结果是一个数组每个元素包含三个字符串字段见 文档 Schema 定义字段类型含义namestring备选方案的注册名如editor、awk、ccstatusstring当前模式通常为auto自动或manual手动currentstring当前生效的备选路径如/usr/bin/gawk完整示例取自仓库测试 fixture 对应的原始输出见 fixtures 输入文件[ { name: arptables, status: auto, current: /usr/sbin/arptables-nft }, { name: awk, status: auto, current: /usr/bin/gawk }, { name: editor, status: auto, current: /bin/nano }, { name: vim, status: auto, current: /usr/bin/vim.basic } ]底层解析原理三列固定格式的行拆分从源码 update_alt_gs.py 可以看到完整的解析流程平台兼容性检查parse()首先调用jc.utils.compatibility()校验当前平台。解析器的info.compatible [linux]见 update_alt_gs.py在非 Linux 平台运行时若未传入quietTrue会向 STDERR 打印一条警告提示如果你处理的是来自受支持平台的输出可忽略此警告见 utils.py 的 compatibility 实现。需要说明的是该警告属于跨平台消费远程文本时的提示并非错误——用户可用-q选项抑制。输入类型校验jc.utils.input_type_check()确保传入的是str对象否则抛出TypeError。空数据处理jc.utils.has_data()检查输入是否只含空白字符无有效数据时返回空列表这一点有测试用例专门覆盖见下文。逐行解析对data.splitlines()过滤掉空行后对每一行执行line.split(maxsplit2)——这是关键所在。update-alternatives --get-selections的输出固定为名称 模式 路径三列且名称与模式之间、模式与路径之间可能存在多个空格而路径本身如/usr/share/man/man7/bash-builtins.7.gz不含空格因此maxsplit2能保证前三列被正确拆开line_list[0]→nameline_list[1]→statusline_list[2]→currentraw 与处理逻辑rawTrue时直接返回上述字典列表否则交给_process()做最终处理。当前版本的_process()为无额外处理见 update_alt_gs.py因为三字段结构本身已符合 Schema无需类型转换或字段重命名——这与update-alt-q需要将priority转为整数等不同。测试验证如何确认解析结果正确仓库提供了针对该解析器的单元测试 test_update_alt_gs.py包含两个用例test_update_alt_gs_nodata传入空字符串quietTrue应返回[]验证空输入边界test_update_alt_gs读取 update-alternatives-get-selections.out包含 41 行真实输出覆盖arptables、awk、vim、w、write等备选方案断言解析结果与 update-alternatives-get-selections.json 完全一致。如果要在本地复现验证可以先手动将update-alternatives --get-selections的输出保存为文件再用 jc 的-p选项对比 JSON 结果也可以直接运行$ python -m unittest tests.test_update_alt_gs与其他解析器的关系与适用前提update-alt-gs本文处理--get-selections的全局清单输出数组适合快速盘点系统上所有备选方案的注册名与当前路径update-alt-q文档处理--query的单个备选详情输出对象包含link、best、value、alternatives列表及优先级等更丰富的信息适合深入分析某一个方案。实际使用中可以根据需求组合先用--update-alt-gs得到全量清单再对感兴趣的name用jc update-alternatives --query name --update-alt-q展开详情。适用前提与限制该解析器针对 Linux 平台的update-alternatives输出设计info.compatible [linux]因此在 Linux 上直接执行jc update-alternatives --get-selections或管道方式均无警告在 macOS/BSD/Windows 上若手动喂入从 Linux 主机采集的文本应使用-q抑制平台兼容性提示解析假定输入行严格符合名称 模式 路径三列格式非该命令格式的输入可能产生解析偏差需先确认数据来源。小结update-alt-gs是 jc 解析器家族中结构最简洁的成员之一输入一行三列文本、输出{name, status, current}列表底层仅依赖split(maxsplit2)即可完成。它的价值在于让系统管理员能够把update-alternatives的状态盘点直接接入 JSON 工具链如 jq、Python、表格化工具快速生成备选方案审计报告或作为自动化配置校验的前置数据源。想深入了解 jc 的解析器架构与更多用法可继续阅读 jc 解析器索引文档 与 通用库参考。赞分享开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载相关推荐jc update_alt_q 解析器将 update-alternatives --query 输出转换为 JSON 的完整实战指南jc update_alt_q 解析器将 update alternatives query 输出转换为 JSON 的完整实战指南 update altern开发工具jc 解析器实战用 jc --amixer 将 amixer sget 输出转换为 JSONjc 解析器实战用 jc amixer 将 amixer sget 输出转换为 JSON jc 是 GitHub 加速计划下的一个 CLI 工具与 Pytho开发工具jc 解析器实战指南用 jc --history 将 shell history 命令输出转换为 JSONjc 解析器实战指南用 jc history 将 shell history 命令输出转换为 JSON 本指南以 jc 开源项目中的 history 解析器文开发工具上一篇SOCD Cleaner如何彻底解决游戏键盘输入冲突提升竞技表现下一篇KKManager游戏Mod管理的智能解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MyDAC源码包深度解析:Delphi直连MySQL协议与认证修复

MyDAC源码包深度解析:Delphi直连MySQL协议与认证修复

简介:这是一份 MyDAC(MySQL Data Access Components)5.00.1.7 的完整源代码压缩包,解决 Delphi、Delphi for .NET、CBuilder 与 Kylix 开发者直连 MySQL 服务器、绕过复杂中间层的数据库访问问题。相较于标准 MySQL 连接方案&…

2026/9/26 8:15:15 阅读更多 →
Atlas 300V推理卡实战:从环境搭建到YOLO多路视频流调优

Atlas 300V推理卡实战:从环境搭建到YOLO多路视频流调优

先给结论:Atlas 300V 24G是一块AI推理加速卡,不是训练卡。很多人第一次看到这个型号,会被“24G”带偏,以为它能像A100、训练卡那样直接拿来训模型。实际上它跑得最顺的场景,恰恰是YOLO这类检测模型的在线推理&#xff…

2026/9/26 8:15:15 阅读更多 →
Windows netsh wlan show命令实战指南:Wi-Fi故障诊断核心技巧

Windows netsh wlan show命令实战指南:Wi-Fi故障诊断核心技巧

1. 为什么一行命令就能揪出Wi-Fi连不上、信号弱、认证失败的根因?你有没有遇到过这样的场景:早上到办公室,笔记本一开机,Wi-Fi图标上挂着一个黄色感叹号;或者在家追剧正酣,突然卡顿、掉线,手机能…

2026/9/26 8:14:15 阅读更多 →

最新新闻

MySQL 5.7.22 生产部署指南:兼容性、安全初始化与 systemd 管理

MySQL 5.7.22 生产部署指南:兼容性、安全初始化与 systemd 管理

简介:本资源为MySQL 5.7.22官方Windows 32位安装包(mysql-5.7.22-win32),面向数据库初学者、运维人员及中小型项目开发者,用于快速部署稳定可靠的开源关系型数据库环境。压缩包共365个文件,含83个动态链接库…

2026/9/26 8:49:35 阅读更多 →
开源代码评审工作流:CLI+Agent+Git Diff三位一体架构

开源代码评审工作流:CLI+Agent+Git Diff三位一体架构

1. 项目概述:这不是一个“工具”,而是一套可落地的开源代码评审工作流“open-code-review”这个名称乍看像某个 GitHub 仓库名,但实际它代表的是一种正在快速演进的工程实践范式——把传统意义上依赖人工、会议、PR评论框完成的代码评审&…

2026/9/26 8:49:35 阅读更多 →
RoboCup 2D agent2d-3.1.1核心机制解析:Role、Bhv与WorldModel协同原理

RoboCup 2D agent2d-3.1.1核心机制解析:Role、Bhv与WorldModel协同原理

简介:本资源是一份面向RoboCup 2D机器人足球竞赛开发者的代码解析文档,专为初学者与进阶开发者梳理核心智能体行为逻辑与系统架构。文档深入拆解了bhv行为动作(如基础跑位、进攻踢球、守门员扑救等14类动作)、role球员角色&#x…

2026/9/26 8:49:35 阅读更多 →
Open-Code-Review:可审计的AI代码审查范式

Open-Code-Review:可审计的AI代码审查范式

1. “Open-Code-Review”不是新工具,而是一套可落地的开源协作范式 你可能在 GitHub Trending 或 Hugging Face 的 Weekly Report 里见过这个词——它不像 pre-commit 那样有明确的 CLI 命令,也不像 SonarQube 那样自带 Web 控制台。它没有官方仓库、…

2026/9/26 8:49:35 阅读更多 →
A2A协议全解析:AI Agent互操作标准、MCP关系与从0到1实践

A2A协议全解析:AI Agent互操作标准、MCP关系与从0到1实践

在 Agent 开发圈子里混久了,你会发现一个很魔幻的现实:单个 Agent 的能力越来越强,但把两个不同团队做的 Agent 放在一起,它们根本没法好好说话。这不光是接口格式不统一的问题,连“你帮我干件事”“干完了&#xff0c…

2026/9/26 8:49:35 阅读更多 →
ChatGPT-Shortcut「我的收藏」完全指南:标签分类、拖拽排序与跨设备同步的提示词库管理

ChatGPT-Shortcut「我的收藏」完全指南:标签分类、拖拽排序与跨设备同步的提示词库管理

AI 应用提示工程人工智能前端 【免费下载链接】ChatGPT-Shortcut Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词&…

2026/9/26 8:48:35 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →