- 移动开发
- 开发工具
【免费下载链接】ZeroTermux
col 是 Linux/UNIX 下经典的标准输入文本过滤器,专门用于滤除文档中的反向换行(RLF)与半反向换行(HRLF)等控制字符,把带终端控制序列的原始文本清洗成可读的纯文本。本文以 ZeroTermux 仓库内置命令手册 col.md 为主体,结合仓库中该手册的加载与渲染实现,系统讲解 col 的语法、选项、工作原理与典型实战用法,帮助读者在 Termux/ZeroTermux 终端环境中快速掌握这一文本清洗工具。
一、col 是什么:标准输入文本过滤器
col 是一个从标准输入读取文本、并把处理结果写到标准输出的过滤器。在许多 UNIX 说明文件(尤其是 man 手册页)内部,都嵌有 RLF 控制字符。当开发者用 shell 的特殊字符>和>>将说明文件的内容重定向输出成纯文本文件时,这些控制字符并不会被自动清除,而会原样落入文件,形成肉眼可见的乱码。col 命令的作用,正是有效滤除这些控制字符,让文本恢复干净、可读的状态。
这一说明来自仓库内置文档 col.md。在 ZeroTermux 中,这类命令手册文件统一存放在app/src/main/assets/cmd/目录下,每一条命令对应一个 Markdown 格式的.md文件(如 col.md、ls.md、man.md),构成了一个完整的、可离线查阅的命令速查手册集。
1.1 RLF 与 HRLF:col 要处理的两类控制字符
理解 col 之前,需要先认识它针对的两类控制字符:
- RLF(Reverse Line Feed,反向换行):控制序列为
ESC 7(即八进制\0337),作用是把光标向上移动一行。在排版中它常用于实现上下标或行内叠字效果。 - HRLF(Half Reverse Line Feed,半反向换行):控制序列为
ESC 8(即八进制\0338),作用是把光标向上移动半行,需要终端支持半行定位能力。
man 手册的排版引擎(roff)会借助这类字符实现两行内容的叠加显示(例如将说明文字与上下标叠加)。而一旦以纯文本方式导出,这些转义序列就变成了干扰阅读的乱码来源——这正是 col 存在的原因。
1.2 语法
col 的命令行语法非常简洁:
col(选项)即col后直接跟可选选项,数据从标准输入流入,清洗结果从标准输出流出。ZeroTermux 内置的 col.md 所记录的语法即为此形式。
二、选项详解:四个核心参数
仓库文档 col.md 完整记录了 col 的四个核心选项,下表逐条整理并补充说明:
| 选项 | 作用 | 使用场景 |
|---|---|---|
-b | 过滤掉所有的控制字符,包括 RLF 和 HRLF | 最常用选项,导出 man 手册为纯文本时优先使用 |
-f | 滤掉 RLF 字符,但允许将 HRLF 字符呈现出来 | 需要保留半行定位排版效果时使用 |
-x | 以多个空格字符来表示跳格字符(Tab) | 将 Tab 展开为空格,避免输出中的制表符在不同终端宽度下错位 |
-l <缓冲区列数> | 指定内存缓冲区列数,默认 128 列,用户可自行指定大小 | 处理超宽文本或大文件时,按需扩大缓冲区 |
对各选项的进一步说明:
-b(filter all control characters):相当于对 RLF 与 HRLF 一视同仁、全部移除,是清洗导出文本的"万能钥匙"。绝大多数man ... | col -b的管道用法都基于该选项。-f(filter RLF but allow HRLF):只移除反向换行,保留半反向换行。适合输出端终端本身支持半行定位、且希望保留叠加排版效果的场景;普通纯文本导出一般不使用。-x(convert tabs to spaces):将水平制表符转换为对应数量的空格,使输出宽度确定、跨终端稳定。-l <num>:col 内部用内存缓冲区存放正在处理的逻辑行,默认按 128 列预分配;当一行内容超长或需要处理大量行时,可通过该选项显式增大缓冲区,避免截断。
从 POSIX 工具族的通用语义看,-b、-f、-x均为选项开关,-l后需跟数字参数,多个选项可组合使用,例如col -b -x。
三、典型应用场景与实战命令
3.1 将 man 手册清洗成纯文本文件
这是 col 最经典、使用频率最高的场景。man 手册页排版时会产生大量 RLF/HRLF 控制字符,直接重定向会得到夹杂乱码的文本。正确做法是用管道交给 col 清洗:
# 查看 ls 的手册并清洗输出 man ls | col -b > ls.txt # 直接查看清洗后的效果(不落盘) man col | col -b | less把 col 自己的手册man col | col -b清洗后再阅读,是最直观的验证方式——你能看到干净整齐的纯文本,而非满屏转义乱码。
3.2 清洗已有的"带乱码"文本文件
如果已经通过>或>>把说明文件导出成了含控制字符的纯文本文件,可以将其重定向回 col 再次清洗:
# 清洗已存在的含控制字符文件 col -b < raw.txt > clean.txt # 原地查看清洗结果 col -b < raw.txt | cat这与仓库文档 col.md 中"把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col 命令则能有效滤除这些控制字符"的描述完全对应。
3.3 制表符展开与超宽文本处理
# 将 Tab 统一展开为空格,保证输出宽度确定 col -bx < mixed.txt > fixed.txt # 处理超长行文本时显式扩大缓冲区(如 256 列) col -b -l 256 < wide.txt > clean_wide.txt-b与-x组合是导出文本最稳妥的搭配:既滤除控制字符,又消除 Tab 在不同终端宽度下的对齐差异。
3.4 与相关命令配合
col 常与以下命令协同完成文本处理管线:
colcrt:专用于过滤半行换行与反向换行的另一款过滤器,适合处理带下划线、上下标的文本;colrm:按列删除文本指定列范围,负责"删列"而非"滤字符";pr、fold等格式化工具:可与 col 串联,对清洗后的文本做进一步分页、折行处理。
四、仓库视角:col.md 在 ZeroTermux 中的加载与渲染
作为 ZeroTermux 内置命令手册体系的一员,col.md 的实际消费逻辑位于仓库源码 CommandDialog.java 中。从源码结构看,其工作链路如下:
- 用户在命令列表界面点击某条命令(如
col),触发showCmdDetail(String cmd)回调; - 通过
AssetManager.open(String.format("cmd/%s", cmd))以流的方式打开app/src/main/assets/cmd/下的对应 Markdown 文件(见 CommandDialog.java); - 使用 CommonMark 的
Parser将 Markdown 文本解析为节点树,再用HtmlRenderer渲染为 HTML; - 最终通过
web_view.loadData(...)以text/html; charset=UTF-8的编码在应用内置 WebView 中展示给用户。
因此,用户在 ZeroTermux 里打开"命令手册"查看col条目时,实际阅读的就是 col.md 这份文档经过解析渲染后的结果。整个命令手册集(cmd/目录下数百个.md文件)均为同一套机制驱动,维护成本集中在 Markdown 源文件本身。
五、使用注意事项
- 标准输入/输出模型:col 只处理标准输入与标准输出,不直接接收文件名参数;对文件操作必须借助输入输出重定向(
<、>)或管道(|)。 -f的适用范围:仅当你确信输出终端支持半行定位、且需要保留叠加排版时再使用-f;常规纯文本导出一律用-b,否则 HRLF 序列仍会残留。- 缓冲区大小:默认 128 列缓冲区面向常规文本;若待处理文档包含超长行,应通过
-l增大缓冲区,避免内容被截断。 - 编码环境:col 处理的是面向字符终端(TTY)的转义序列,与现代多字节编码(UTF-8)文本配合时,建议先确认输出端终端与文件的编码一致,再执行清洗。
六、小结
col 是一个轻量却极其实用的文本过滤工具:它通过滤除 RLF/HRLF 控制字符、可选展开制表符,把 man 手册等含终端排版序列的原始文本清洗成可直接阅读、可长期存档的纯文本。在 ZeroTermux 中,col.md 既是这条命令的速查手册,也是内置命令手册体系(由 CommandDialog.java 统一加载渲染)的一个典型样例。掌握了col -b、col -x、col -l的组合用法,你就能在终端中随手将任何带控制字符的文档"洗"成干净文本。
- 移动开发
- 开发工具
【免费下载链接】ZeroTermux
相关推荐
Linux col 命令详解:过滤 RLF/HRLF 控制字符,还原干净的纯文本输出
Linux col 命令详解:过滤 RLF/HRLF 控制字符,还原干净的纯文本输出 导读: col 是 Linux 下用于从标准输入读取文本、过滤其中反向换行
文档教程如何将Uncle Bob整洁架构落地Android?Android-CleanArchitecture完全入门指南
如何将Uncle Bob整洁架构落地Android?Android CleanArchitecture完全入门指南 Android CleanArchitect
移动开发开发工具Tree-sitter 解析器使用指南:从 C API 核心对象到增量解析实战
Tree sitter 解析器使用指南:从 C API 核心对象到增量解析实战 Tree sitter 是一个增量解析系统:它能把源代码构建成具体语法树(con
移动开发开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考