对于高级程序员而言,命令行才是最酷的存在,除非万不得已,才会考虑使用GUI或IDE。
本文汇总几款命令行下文档处理工具。
Pandoc
官网,使用Haskell语言编写、开源(GitHub,40.6K Star,3.7K Fork)基于命令行的通用文档转换器。
支持几十种文件格式的转换,各种调整细节的选项也不计其数,除基础的文档转换功能外,还能通过Lua、Python等脚本语言实现高度自定义的文档转换,成为其他很多现代文档工具的依赖,如R Markdown、Quarto。官方PDF使用手册,多达172页,更新也很及时和频繁。
实战
支持多种安装方式
shell
# Windows
choco install pandoc
# Mac
brew install pandoc
# Linux
sudo apt-get install pandoc
不擅长命令行的,可从GitHub Release页面下载安装包,以Windows平台为例:

推荐下载zip包免安装版,解压缩即可用:

加入系统环境变量PATH即可,检查pandoc --version是否可用。
命令行使用:
bash
pandoc -f markdown input.txt -t html -o output.html
解读:
-f等价于--from、-r、--read,用于指定输入文件的格式;-t等价于--to、-w、--write,用于指定输出文件格式;-o等价于--output,用于指定输出文件名。
输入或输出的文件格式不是必须的,可根据文件扩展名推测出文件格式;如果输入文件没有扩展名,默认是Markdown;如果输出文件没有扩展名,默认是HTML。
如果没有指定输入文件,Pandoc会从stdin读入,如果没有指定输出文件,则输出为stdout,也就是直接显示在终端中;可和其他Linux命令结合使用管道符。
默认设置行宽为72,--wrap=preserve表示不换行,保持原样。
其他命令行:
bash
# CSV转换成markdown
pandoc -f csv tips.csv -o tips.md
pandoc arma_acf.png -o aa.pdf
pandoc arma_acf.png --pdf-engine=xelatex -o aa.pdf
遇到的问题:

CSV转换到markdown,没有分割线|。
转换PDF失败:

参考LaTeX安装与配置,下载得到basic-miktex-24.1-x64.exe,双击安装,自动追加D:\Program\MiKTeX\miktex\bin\x64\到PATH系统变量。
重试弹窗如下:

点击更改:

安装好多个宏包后,还是出错

重试pandoc arma_acf.png --pdf-engine=xelatex -o aa.pdf,也是安装各种宏包,最后还是失败。
换个md文件:pandoc LangChain.md --pdf-engine=xelatex -o aa.pdf,PDF是生成成功,但忽略掉中文:

分析:xelatex选择的默认字体不支持中文字符,追添字体设置参数-V CJKmainfont="SimSun",并再次对文件进行编译。
重试命令pandoc LangChain.md --pdf-engine=xelatex -V CJKmainfont="SimSun" -o aa.pdf,终于成功:

注意:执行命令时,PDF文件不能是打开模式,否则出现上面pandoc.exe: aa.pdf: withBinaryFile: permission denied (Permission denied)报错。
Pandoc's Markdown
标准Markdown有不少局限性,导致Markdown方言层出不穷。
主要包括以下扩展语法:
- 表格:简单表格、多行表格、网格表、管道表格
- 列表:多种多样的有序列表和无序列表
- 行块:以
|开头,可用于诗歌等特殊文体的排版 - 脚注:包括常规脚注和行内脚注
- 文献引用:支持BibTeX等多种引文格式
- 数学公式:用
$或$$包裹数学公式 - 支持混合使用LaTeX和HTML语法
CommonMark
一套针对标准Markdown语法进行严格定义并与之高度兼容的规范。
PanWriter
官网,开源(GitHub,1.2K Star,59 Fork)跨平台基于Pandoc的Markdown编辑器,通过GUI的方式实现Pandoc部分文档转换功能。
qsv
官网,开源(GitHub,3.3K Star,94 Fork)、基于Rust、跨平台、命令行下的高性能的表格数据(CSV、Excel、TSV等)处理工具,提供数据查询、切片、索引、分析、过滤、转换、排序、验证、连接、格式化等功能。在线体验,官方文档。
一个为现代数据工作流打造的高效命令行数据处理工具,尤其适合大型结构化的表格数据处理,它完美地填补简单文本处理工具(如grep、awk)和重型编程语言(如Python、R)之间的空白。
功能特性:
- 超高性能:使用Rust和Polars编写,能够充分利用现代CPU的并行处理能力、索引、缓存以及流式处理等优化方式,对于大型文件(GB甚至更大)的处理速度通常远超传统脚本(如
pandas)或其他命令行工具(如awk、sed); - 功能丰富:超过50个数据处理命令,包括apply、cat、count、datefmt、diff、edit、excel、explode、fetch、foreach、join、json、luau、pivotp、select、slice、sort、sqlp、to、transpose等;
- 简单易用:采用逻辑清晰的子命令结构和详细的帮助文档。命令
qsv count data.csv用于统计行数。qsv Pro版本提供图形化的操作界面,适合非技术人员; - 工作流管道:可将多个命令或者操作系统命令组合使用,构建复杂的数据处理流程。例如,命令
qsv stats data.csv | qsv table用于分析每列的统计信息(数据类型、最大值、最小值、标准差等),并且以整齐的表格形式进行展示;
实战
从官网下载,实际上还是去GitHub Release页面下载,以Windows为例:

怎么选?
GNU和MSVC是Windows系统下两种不同的构建工具链(编译环境)产生的版本,区别主要在于:
- GNU版本(对应
-gnu.zip)- 使用MinGW/GCC编译器,依赖MSYS2/MinGW运行时库,与Linux工具链更相似
- 通常文件体积稍小,兼容性较好,尤其是旧系统
- MSVC版本(对应
-msvc.zip)- 使用Microsoft Visual Studio C++编译器,依赖Microsoft Visual C++运行时库
- 与Windows原生开发环境集成更好,性能可能略有优势(特别是涉及SIMD时)
本文下载GNU版本,解压缩,得到:

添加到PATH环境变量,然后在任何目录都能使用。10.0.0版本提供多达63个子命令,限于篇幅,并未完全列出来:
bash
qsv --list
Installed commands (63):
apply Apply series of transformations to a column
behead Drop header from CSV file
cat Concatenate by row or column
count Count records
datefmt Format date/datetime strings
dedup Remove redundant rows
describegpt Infer extended metadata using a LLM
diff Find the difference between two CSVs
edit Replace a cell's value specified by row and column
enum Add a new column enumerating CSV lines
excel Exports an Excel sheet to a CSV
当然也提供命令行安装方式:
bash
# Windows
scoop install qsv
# Mac
brew install qsv
sudo port install qsv
# Linux
sudo apt install qsv
命令行使用:
bash
# 展示标题名
qsv headers news.csv
# 统计行数,含标题
qsv count news.csv
# 输出
qsv table iris.csv
# 不展示标题
qsv behead iris.csv
# CSV转换成JSONL
qsv tojsonl iris.csv
# 文件对比
qsv diff iris.csv iris-test.csv
# 检查是否已排序
qsv sortcheck iris.csv
# 排序后输出
qsv sort iris.csv
# 倒序输出,先输出最后一行,最后输出第二行
qsv reverse tips.csv
# SQL查询,from后的表名需和文件名一致
qsv sqlp tips.csv 'select * from tips order by total_bill desc'
# 以$$包含字段值
qsv sqlp tips.csv 'select * from tips where sex = $$Male$$'
遇到的问题:

对于.xlsx格式的支持。
对JSONL不熟悉的请参考:JSON衍生。
doxx
开源(GitHub,3.3K Star,75 Fork)基于Rust语言开发,可实现在终端里查看Word文档。官方文档。
特性:
- 终端原生Word查看体验:与传统Office软件相比,非常轻量启动速度极快,30MB文档仅需50毫秒打开;能很好地保持文档原有格式,如标题、段落、列表、表格。
- 智能表格渲染技术:自动识别表格中的数据类型,智能对齐即使在黑色终端背景下也能保持清晰的可读性。表格边框是使用Unicode字符精心绘制,自行缩放边框样式,在不同尺寸终端窗口也能正常显示。
- 高效的搜索和导航功能:
- 全文搜索:按
s键进入搜索模式,支持正则表达式匹配,搜索结果会实时高亮显示,并提供上下文信息; - 大纲视图:按
o键可以切换到文档大纲模式,显示完整的标题层级结构,快速定位到感兴趣的章节; - 复制功能:按
c键可以将当前视图的内容复制到系统剪贴板,在不同视图模式下会复制相应的内容格式。
- 全文搜索:按
- 多格式导出能力:具备强大的格式转换功能,支持markdown、CSV、JSON、纯文本(可与
grep、awk等命令行配合使用):doxx document.docx --export csv
实战
安装:
bash
# 二进制安装
curl-L https://github.com/bgreenwell/doxx/releases/latest/download/doxx-$(uname -s)-$(uname -m).tar.gz | tar xz
sudomv doxx /usr/local/bin/
# 源码安装
git clone https://github.com/bgreenwell/doxx.git
cd doxx
cargo install --path .
doxx --version