Linux中的fmt是一个用于简化和重新格式化纯文本文件的命令行工具。它的主要作用是将输入的文本按照指定的宽度重新排版,把过长的行拆开,把过短的行合并,使整段文字看起来整齐统一。这个命令通常随coreutils软件包一起发布,在绝大多数Linux发行版里都可以直接使用,不需要额外安装。

fmt命令的基本含义
fmt的英文名来自format,直译就是格式化,但在Linux语境下它专指对纯文本进行简单的填充与折行处理。很多人第一次看到fmt会误以为它是像C语言里printf那样复杂的格式控制工具,其实完全不是。它不做变量替换,也不识别占位符,只是根据空白字符来切分单词,然后按目标行宽把单词重新排列。
例如你从网页复制了一段窄列文字,每行只有十几个字,阅读时眼睛要不停换行;或者你有一段很长的句子没有任何换行,在终端里显示出了横向滚动条。这两种情况都可以用fmt快速规整。它默认目标是让每行接近七十二个字符,同时尽量保持单词完整,不在一个单词中间断开。
常用参数与行为规则
fmt最实用的参数是-w或者--width,用来设定目标行宽。比如fmt -w 60表示希望每行大约六十列。如果不写,多数系统沿用七十二列的传统默认值。另一个常见选项是-s或--split-only,它只把过长的行拆短,而不会把相邻的短行拼到一起,适合只想消除超长行的场景。
还有一个容易忽略的规则:fmt以空白行作为段落分隔,不会跨空行去合并文字。也就是说,两段之间如果有空行,格式化后依然是两段。它在处理时把连续的空白字符合并为一个空格,所以原文里多个空格也会被压缩。下面这段命令演示了基础用法:
# 将input.txt按50列宽度重新排版,输出到屏幕 fmt -w 50 input.txt # 只拆分长行,不合并短行 fmt -s readme.txt # 从管道读取内容并格式化 echo "Linux fmt是一个简单的文本排版工具 它能让段落更整齐" | fmt -w 20
实际代码示例与效果对比
假设我们有一个文件note.txt,内容如下,每行长度参差不齐:
Linux fmt命令 可以把乱糟糟的文本 重新排好。它按照宽度折行,并且合并短行,使段落更易读。
使用fmt -w 30 note.txt之后,输出会变成接近三十列宽度的连贯段落。注意fmt不会添加任何缩进,也不会改动标点符号,仅仅移动换行位置。如果你在脚本里批量整理日志说明,这种无侵入的特性非常安全。
再看一个带空行的情况,fmt会保留段落结构:
# 原文含有空行分隔的两个段落 cat > demo.txt << 'EOF' 第一段落有一些短句。 它们会被合并。 第二段落单独存在。 EOF # 格式化后空行仍在,段落内部被重排 fmt -w 25 demo.txt
fmt与类似工具的区别
有些用户会拿fmt和fold命令比较。fold也是折行工具,但它是硬切,可能在单词中间断开,而fmt以单词为单位,排版结果更适合人读。还有人用sed或awk写正则来处理换行,那种方式灵活却容易误伤代码结构;fmt定位就是轻量文本美化,不适合处理源码或带特殊标记的文件。
在编写提交信息或整理命令行帮助文本时,fmt能显著提升可读性。但它不理解Markdown、HTML等格式,若原文含有<table>这类标签,fmt会当作普通字符处理,可能把标签拆散,因此格式化富文本前应先提取纯文字。
使用注意事项
由于fmt依据空格和制表符切分单词,中文文本如果没有空格分隔,它通常整句当作一个超长单词,导致无法正确折行。此时可以借助其他支持中日韩宽字符的工具,或者先手动在中文标点后加空格。另外fmt读取标准输入时,按Ctrl+D结束输入即可看到格式化结果。
总体来看,Linux fmt是一个被低估的小命令。它语法极简,却能在邮件草稿、终端笔记、脚本输出整理中节省大量手工调整时间。搞清楚它的段落边界识别和宽度控制逻辑,就能安心把它放进日常工具箱。