
开发工具【免费下载链接】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 项目内置的group解析器文档位于 docs/parsers/group.md它可以把 Linux、macOS、AIX、FreeBSD 等系统上的/etc/group文本输出转换为结构化的 JSON 数组从而让脚本和 jq 等工具可以直接消费系统用户组信息。读完本文你将掌握jc --group的命令行用法、Python 模块调用方式、输出 Schema、raw 模式与处理模式的差异以及该解析器在源码层面的解析与类型规整逻辑。/etc/group 文件格式与解析场景/etc/group是类 Unix 系统的用户组数据库每一行描述一个组格式为以冒号分隔的四个字段group_name:password:gid:member1,member2,...group_name组名password组口令占位符通常为x或*现代系统一般不在此存储真实口令gid组 ID数字members以逗号分隔的组成员列表无成员时该字段为空。系统管理员、自动化脚本和运维工具经常需要遍历用户组及其成员来审计权限、生成报告或驱动配置流程而cat /etc/group的纯文本输出难以直接交给 JSON 生态工具处理。jc 的group解析器正是为这一场景设计它逐行解析该文件输出一组规范的 JSON 对象。从源码元数据看该解析器被标记为tags [file]归类为文件类解析器兼容 linux、darwin、aix、freebsd 四大平台见 jc/parsers/group.py 中的info.compatible。快速上手CLI 用法与模块用法原文档给出了两种标准的调用方式。命令行方式$ cat /etc/group | jc --group--group是 jc CLI 中该解析器的触发参数。将cat的输出通过管道交给 jc即可在标准输出得到 JSON 数组。常用组合还有-ppretty 格式化输出和-rraw 原始模式例如$ cat /etc/group | jc --group -pPython 模块方式import jc result jc.parse(group, group_file_output)其中group_file_output是包含/etc/group全文内容的字符串jc.parse()会根据解析器名称group分派到对应的解析函数返回List[Dict]结构。在脚本中读取文件可写作import jc with open(/etc/group, r, encodingutf-8) as f: result jc.parse(group, f.read())输出 Schema 详解解析结果是一个对象数组每个对象对应/etc/group中的一行Schema 定义如下与文档完全一致[ { group_name: string, password: string, gid: integer, members: [ string ] } ]字段说明字段类型含义group_namestring组名passwordstring组口令占位符gidinteger组 ID默认模式下为整数membersarray of string组成员列表无成员时为空数组[]值得注意默认处理模式下gid是 JSON 整数类型而在-rraw 模式下所有字段保持字符串原貌members也会保留原始的空串形态。两种模式的差异详见下文。示例输出处理模式与 raw 模式默认处理模式-p以 macOS 系统为例来自 tests/fixtures/osx-10.14.6/group.out执行$ cat /etc/group | jc --group -p得到节选[ { group_name: nobody, password: *, gid: -2, members: [] }, { group_name: nogroup, password: *, gid: -1, members: [] }, { group_name: wheel, password: *, gid: 0, members: [ root ] }, { group_name: certusers, password: *, gid: 29, members: [ root, _jabber, _postfix, _cyrus, _calendar, _dovecot ] }, ... ]raw 模式-p -r$ cat /etc/group | jc --group -p -rraw 模式保留文本原始形态gid保持字符串如-2、0、29且当组成员字段为空时members数组是[]而非[][ { group_name: nobody, password: *, gid: -2, members: [ ] }, ... ]这一区别对下游处理很重要raw 模式适合忠实还原原始数据处理模式则输出更干净的标准化 JSON便于直接用 jq 做数值比较与空值判断。parse() 函数源码解析原文档给出了函数的公开签名def parse(data, rawFalse, quietFalse)参数说明data(string)待解析的文本数据raw(boolean)为 True 时返回未处理的原始结构化数据quiet(boolean)为 True 时抑制警告信息。返回值为 List of Dictionariesraw 或处理后的结构化数据。结合 jc/parsers/group.py 的实现parse()的执行流程可以概括为五步兼容性与输入检查调用jc.utils.compatibility(__name__, info.compatible, quiet)检查当前运行平台是否在支持列表中并用jc.utils.input_type_check(data)校验输入类型按行拆分与清理data.splitlines()切分文本行再用filter(None, ...)剔除空行空数据保护通过jc.utils.has_data(data)判断输入是否有效避免对空输入做无意义解析逐行解析跳过以#开头的注释行macOS 的/etc/group文件头部就带有多行注释其余每一行用entry.split(:)按冒号切分按位置取出四个字段output_line[group_name] fields[0]output_line[password] fields[1]output_line[gid] fields[2]output_line[members] fields[3].split(,)逗号切分成组成员列表raw 分流rawTrue时直接返回raw_output否则交给_process()做类型规整。这段实现对应了文档中raw 模式保留字符串的行为raw 模式下gid就是字符串、空成员字段切分后得到[]。结合源码看处理细节类型转换与空值规整_process()是 raw 输出与最终 Schema 之间的桥梁源码见 jc/parsers/group.pydef _process(proc_data): int_list {gid} for entry in proc_data: for key in entry: if key in int_list: entry[key] jc.utils.convert_to_int(entry[key]) if entry[members] []: entry[members] [] return proc_data它只做两件事恰好解释了上文两种模式的差异gid 类型转换将gid字段用jc.utils.convert_to_int()转为整数。注意 macOS 上存在负数 gid如nobody的-2、nogroup的-1该转换同样能正确处理负数空成员规整当members恰好等于[]即原始组无成员时规整为空数组[]使输出更符合 JSON 消费习惯。值得说明password字段不会做任何类型转换始终保留为字符串如x、*与 Schema 定义一致。测试用例与多平台验证该解析器在仓库测试套件中有完整的验证覆盖见 tests/test_group.py使用三套真实系统的夹具进行断言平台输入夹具期望输出夹具CentOS 7.7tests/fixtures/centos-7.7/group.outtests/fixtures/centos-7.7/group.jsonUbuntu 18.04tests/fixtures/ubuntu-18.04/group.outtests/fixtures/ubuntu-18.04/group.jsonmacOS 10.14.6tests/fixtures/osx-10.14.6/group.outtests/fixtures/osx-10.14.6/group.json此外还包含空输入用例test_group_nodatajc.parsers.group.parse(, quietTrue)应返回[]验证了空数据保护逻辑。从 CentOS 7.7 的夹具可以看到典型 Linux 场景root:x:0:无成员、wheel:x:10:joeuser单成员、joeuser:x:1000:joeuser用户与私有组同名等形态都能被正确解析为对应的 JSON 对象。macOS 夹具则覆盖了负数 gid、#注释头以及certusers:*:29:root,_jabber,_postfix,_cyrus,_calendar,_dovecot这样的多成员行说明解析器对平台差异有良好的兼容性。进阶实战与 jq 组合做用户组审计解析出 JSON 之后可以自然地与 jq 组合完成各类审计与统计任务。例如列出所有 gid 大于 1000 的用户组$ cat /etc/group | jc --group | jq .[] | select(.gid 1000) | .group_name统计每个组有多少成员并过滤非空组$ cat /etc/group | jc --group | jq .[] | select(.members | length 0) | {group_name, member_count: (.members | length)}检查某个用户是否属于指定组如wheel$ cat /etc/group | jc --group | jq .[] | select(.group_name wheel) | .members由于默认处理模式下gid已是整数、members已是数组上述 jq 表达式可以直接使用数值比较和数组长度操作无需再做字符串转换——这正是 raw 与处理模式取舍的典型场景。兼容性与版本信息兼容平台linux、darwin、aix、freebsd源码位置jc/parsers/group.py版本1.5作者 Kelly Brazilkellyjonbrazilgmail.com。若需要在脚本中调用该解析器可参考 tests/test_group.py 的用例写法直接以jc.parsers.group.parse(data, quietTrue)的方式使用若希望了解 jc 的整体框架与更多解析器可进一步阅读 docs/lib.md 与 docs/readme.md。赞分享开发工具【免费下载链接】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 解析器实战用 jc 将 /etc/gshadow 组影子文件转换为 JSONjc 解析器实战用 jc 将 /etc/gshadow 组影子文件转换为 JSON 本篇技术指南聚焦 jcJSON Convert项目中的 gshadow开发工具jc 解析 /etc/fstab把文件系统挂载表转换为 JSON 的实用指南jc 解析 /etc/fstab把文件系统挂载表转换为 JSON 的实用指南 本指南以 jc 项目的 fstab 解析器为核心讲解如何把 Linux/Fre开发工具Pandoc 实战将 LaTeX subfigure 子图转换为 JATS fig-group 的完整解析Pandoc 实战将 LaTeX subfigure 子图转换为 JATS fig group 的完整解析 导读 本文围绕 Pandoc 官方测试用例 tes文档开发工具CLI上一篇OceanBase数据库备份加密恢复终极指南如何安全保护企业数据下一篇PT 助手 Plus 环境变量配置区分开发与生产环境创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考