尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Serenity OS 中 cut 命令的完整指南:按字节、字符与字段裁剪文本行
Serenity OS 中 cut 命令的完整指南按字节、字符与字段裁剪文本行【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenity本指南以 Serenity Operating System 的cut命令手册页Base/usr/share/man/man1/cut.md为主体结合其源码实现 Userland/Utilities/cut.cpp系统讲解该命令的语法、全部选项、范围range语法规则与典型实战用法。读完本文你将掌握在 Serenity OS 的 Shell 中利用cut精准提取文本行中的字节、字符与字段并能理解其在底层是如何解析与合并选择范围的。命令概览从每行文本中切除并输出指定部分cut是一个面向文本行的按列裁剪工具其核心语义是按行读取输入从每一行中选出指定的字节、字符或字段field并输出到标准输出。它不修改原文件只负责选择并打印非常适合配合管道与其他文本处理命令组合使用。与 GNU coreutils 中的cut类似Serenity OS 的实现遵循以下约定如果没有指定文件或指定的文件为-则从标准输入读取选择范围range中的位置编号从 1 开始每一行输出后自动追加换行符。用法与参数Synopsis$ cut option... [file...]Arguments参数说明file要裁剪的文件可指定多个省略或为-时读取标准输入Options选项长选项说明-b list--byteslist只选择指定的字节位置-c list--characterslist只选择指定的字符位置-f list--fieldslist只选择指定的字段同时会打印不包含分隔符的行-d delim--delimiterdelim用delim取代默认的制表符作为字段分隔符-s--only-delimited抑制不打印任何不包含字段分隔符的行说明手册页中列出的是-b、-f、-d、-s四个选项而源码 cut.cpp 中额外注册了-c/--characters选项按字符选择实际使用时同样可用其行为与按字节选择的-b的区别在于对多字节 UTF-8 字符的处理。关键约束来自源码的强制校验在 cut.cpp 的serenity_main中程序启动后会执行如下合法性检查违反任一条件都会输出错误并返回退出码 1必须且只能指定一种选择模式-b、-c、-f三者必须指定其一且不能同时指定多个cut: you must specify a list of bytes, characters, or fields/cut: you must specify only one of bytes, characters, or fields分隔符必须是单个字符cut: the delimiter must be a single character。范围list语法详解-b、-c、-f接受的list参数由逗号分隔的多个范围项组成。范围项的解析逻辑位于expand_list函数cut.cpp支持四种形式形式含义示例N单个位置5表示第 5 个位置N-M闭区间范围含两端2-4表示第 2、3、4 个位置N-从第 N 个位置到行尾3-表示第 3 个位置及其之后-M从第 1 个位置到第 M 个位置-3表示第 1、2、3 个位置多个范围项用逗号连接例如1,3-5,8-。源码会依次做如下处理边界校验位置从 1 开始计数任何位置为 0 的写法都会报错cut: byte/character positions are numbered from 1N-M中N M时报错cut: invalid decreasing range单独的-无端点报错cut: invalid range with no endpoint排序解析出的所有范围按起点m_from升序排列cut.cpp合并重叠区间相邻或相交的范围会被合并为不相交的区间列表disjoint_ranges见 cut.cpp避免同一位置被重复输出。实战示例手册页给出了完整的运行示例以下逐一复现并补充说明。假设example.txt内容如下每行由制表符分隔的 5 个字段组成245:789 4567 M:4540 Admin 01:10:1980 535:763 4987 M:3476 Sales 11:04:1978按字段裁剪-f# 显示第 1 和第 3 个字段默认以制表符分隔 $ cut example.txt -f 1,3 245:789 M:4540 535:763 M:3476从源码process_line_fieldscut.cpp可以看到字段模式的具体行为行按分隔符切分ByteString(line).split(delimiter, SplitBehavior::KeepEmpty)空字段会被保留若整行只切出 1 个字段即不包含分隔符默认会原样输出该行除非指定了-s选中的字段会重新用同一分隔符拼接后输出。自定义分隔符-d# 使用 : 作为分隔符显示第 1 和第 3 个字段 $ cut example.txt -d : -f 1,3 245:4540 Admin 01 535:3476 Sales 11注意此处-d :后每行会被切成245、789 4567 M、4540 Admin、01、10、1980共 6 个字段第 1 和第 3 个字段用:重新拼接输出。字段编号是切分后的编号而不是视觉上第几列这是使用自定义分隔符时最容易踩的坑。按字节裁剪-b# 显示第 5 个字节 $ echo serenity is cool | cut -b 5 necho serenity is cool输出serenity is cool\n第 5 个字节是n。该示例同时演示了cut从标准输入读取数据的用法省略文件名时读取 stdin。按字符裁剪-c当文本包含多字节 UTF-8 字符时-c按字符与-b按字节的结果会不同。源码process_line_characterscut.cpp通过String::from_utf8(line)将输入解码为 Unicode 码点序列再按码点位置输出因此对中文、emoji 等多字节字符能给出符合直觉的结果而-b会按原始 UTF-8 字节逐个输出可能截断字符。进阶用法与行为细节组合使用管道中的文本处理# 提取 /etc/passwd 风格文件中每个用户的用户名第 1 个字段以 : 分隔 $ cut -d : -f 1 /etc/passwd # 从命令输出中取前 3 个字段 $ ls -l | cut -f 1-3多文件与错误处理cut支持一次处理多个文件位置参数可多个见 cut.cpp若某个文件无法打开会输出cut: Could not open file xxx并继续处理其余文件而非整体退出cut.cpp。与 head / cat 的协同cut常与 head(1)、cat(1) 等命令配合cat负责拼接多个文件内容head负责截取行数cut负责截取行内片段。三者组合可以完成从多份日志文件中提取前 N 行的第 M 个字段这类典型的运维文本处理任务。源码位置与构建cut的实现源码位于 Userland/Utilities/cut.cpp其构建集成在 Userland/Utilities/CMakeLists.txt 中该文件被列入CMD_SOURCES第 34 行并作为REQUIRED_TARGETS第 237 行之一随系统默认构建、安装到bin/cut。它基于LibCore::ArgsParser解析命令行参数cut.cpp并使用LibCore::InputBufferedFile以PAGE_SIZE缓冲逐行读取输入cut.cpp保证大文件下也能高效处理。结语Serenity OS 的cut命令虽然小巧但在参数校验、范围解析与区间合并等细节上做工扎实。掌握-b/-c/-f三种选择模式、N/N-M/N-/-M四种范围写法以及-d、-s的配合足以覆盖绝大多数按列裁剪文本的场景让它成为你 Shell 文本处理工具箱中可靠的一环。【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

WeChatMsg:免费导出微信聊天记录,把三年的对话永久保存

WeChatMsg:免费导出微信聊天记录,把三年的对话永久保存

WeChatMsg:免费导出微信聊天记录,把三年的对话永久保存 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trend…

📅 2026/9/10 15:11:00
WeChatMsg:微信聊天记录导出的最短路径,一次把 3 种格式存进硬盘

WeChatMsg:微信聊天记录导出的最短路径,一次把 3 种格式存进硬盘

WeChatMsg:微信聊天记录导出的最短路径,一次把 3 种格式存进硬盘 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/Git…

📅 2026/9/10 15:11:00
SSM框架实现澡堂预订微信小程序开发实战

SSM框架实现澡堂预订微信小程序开发实战

1. 项目概述:澡堂预订微信小程序的商业价值与技术实现在生活服务数字化浪潮中,传统澡堂行业正面临转型升级的关键节点。去年帮老家亲戚改造澡堂管理系统时,我深刻体会到:一个轻量级的微信小程序预订系统,能直接提升30%…

📅 2026/9/10 15:10:59
MORE NEWS

更多资讯

📰

TVBoxOSC 上手指南:不编译也能拿到最新电视盒子版 TVBox

TVBoxOSC 上手指南:不编译也能拿到最新电视盒子版 TVBox 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC TVBoxOSC 是 TVBoxOS/Box 电…

📰

Python面向对象编程:类与对象、三大特性及实战应用

1. 面向对象编程基础:从理解类与对象开始第一次接触面向对象编程(OOP)时,很多人会被"类"和"对象"的概念绕晕。其实用生活中的例子就很好理解:类就像设计图纸,而对象是根据图纸建造出来的具体房子。在Python中…

📰

Kivy跨平台应用开发实战:从环境搭建到发布

1. 为什么选择Kivy开发跨平台应用最近帮朋友做了个音乐播放器项目,需要同时跑在Android和iOS上。本来打算用Flutter,但考虑到团队有Python开发经验,最终选择了Kivy这个冷门但强大的框架。说实话刚开始心里也没底,但实际用下来发现…

📰

Coding Conventions

Coding Conventions 【免费下载链接】get-shit-done A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TCHES. 项目地址: https://gitcode.com/GitHub_Trending/getshi/get-shit-done Analysis…

📰

Calibre 格式转换教程:30 秒把 PDF 变成手机 EPUB

Calibre 格式转换教程:30 秒把 PDF 变成手机 EPUB 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre 手机上翻扫描版 PDF,每页都要捏合缩…

📰

Claude Code Router 怎么接入 Kimi CLI 并用 /model 在多个可用模型间切换

Claude Code Router 怎么接入 Kimi CLI 并用 /model 在多个可用模型间切换 【免费下载链接】claude-code-router One local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control. 项目地址: https…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬