fmt 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
fmt——文本处理命令族(见文本处理与搜索命令族)。当你从网页/PDF 复制了一段乱换行的中英混排文字,想整理成整齐段落时,它很省力。
fmt 把输入重新排版:把破碎的、长短不一的行合并成段落,再按指定宽度折行,让每行长度尽量均匀。
一、基本用法
bash
fmt file.txt # 默认按约 75 列重新折行
fmt -w 60 file.txt # -w 指定目标行宽(width)为 60 列
fmt -u file.txt # -u 统一词间空格为单个(删除多余空格)
cat file.txt | fmt # 也从管道读默认宽度约 75 字符。
-w控制每行目标长度;-u(uniform spacing)会把连续的多个空格压成单个、词间只留一个空格,对清理从网页复制来的文本特别有效。
二、保留缩进与编号
bash
fmt -p '# ' notes.txt # -p 保留以 "# " 开头的行作为段落前缀(如注释块)
fmt -c file.txt # -c 让每段的第二行起按首行缩进对齐
-p适合处理带统一前缀的块(比如#注释、邮件引用>),fmt 会把前缀保留下来而不破坏段落结构;-c做"首行缩进后对齐"的整齐效果。
三、fmt vs fold vs cat
| 命令 | 行为 |
|---|---|
fmt | 按词边界重排段落,行宽均匀,懂段落 |
| fold | 只按字符宽度硬折,不管词(见fold 命令详解) |
| cat | 原样输出,不排版(见cat 命令详解) |
要"排版成好看段落"用 fmt;要"严格每 N 个字符断行、宁可截断单词"才用 fold。fmt 不会在单词中间断开,这点比 fold 聪明。
四、踩坑:空行与段落划分
bash
# fmt 以空行分隔段落;没有空行的连续文本会被当成一个大段统一折行
echo "line1
line2" | fmt # 两行会合成一段重排fmt 用空行来识别"段落边界"。如果你的文本块之间没有空行,它就把所有内容当一段处理——这通常正是你想要的(合并碎行),但如果有意保留小节,需要保留空行分隔。
五、实战:整理从网页复制的乱换行文本
bash
# 把剪贴板内容(假设存成 paste.txt)整理成 70 列整齐段落
fmt -w 70 -u paste.txt > clean.txt一句话总结
fmt = 按词边界重排段落:-w 设行宽、-u 统一空格、-p 保留前缀;比 fold 懂单词、不会在词中断开,适合整理复制来的乱换行文本。段落以空行分隔。原样输出用 cat。