文本处理77 条

fold 按宽度折行

把超宽行按指定列数硬折行:处理日志里超长单行、给不支持横向滚动的程序喂文本时用;-s 尽量在空格处断。

Linux 运维命令速查系统更新于 2026-10-13

fold 是什么

fold 把超过指定宽度的行折断成多行,是 GNU coreutils 里的纯机械折行工具。-s 会尽量在空格处断行,默认按显示列宽计算,所以制表符会先按 tabstop 展开再计入宽度。与 fmt 的区别在于 fmt 会重排自然语言段落的词序并整齐段落,fold 只按位置硬切,不关心词意与语义。

基本信息

所属GNU coreutils(各发行版默认安装)
语法fold [-b] [-s] [-w 宽度] [文件]
默认宽度80 列,按显示列宽计算
对比工具fmt 重排段落文本,fold 只做机械折行

典型使用场景

  • 日志里出现几万字符的单行,先折行再进编辑器或邮件客户端
  • 给不支持横向滚动的终端或老程序喂定宽文本
  • 生成固定宽度文本报告,导出给下游老系统解析
  • 把长 UUID、长令牌按固定字符数切段方便人工核对
  • 跨屏对比两段长文本时统一折成同一宽度
  • 给终端里打印的宽表格做兜底折行,避免右侧内容被截断

常用示例

常用示例
fold -w 80 longline.log            # 按 80 列硬折行
fold -s -w 76 report.txt           # 尽量在空格处断行,保留可读性
fold -b -w 100 noisy.log           # -b 按字节数而非显示宽度
fold -w 40 file.txt | nl           # 折行后编号,方便核对行数
echo "$longid" | fold -w 8         # 把长串切成 8 字符一段
fold -w 120 wide.csv | head        # 宽表格先折再预览,避免终端错行
cat -A file.txt | head             # 先确认制表符与空格的真实情况
fold -s -w 72 mail.txt | less      # 折行后分页阅读邮件正文

常用选项

选项作用说明
-w N指定折行宽度默认 80,按显示列宽计数
-s尽量在空格处断行超长单词仍会被硬断
-b按字节计数折行中文等多字节内容结果与列宽不同
无参从标准输入读取管道场景最常用
多个文件按顺序处理并合并输出与先 cat 再折行等价
fold 默认按显示列宽计算,制表符会按当前 tabstop 展开后再算宽度;只关心字节数时(比如按固定长度字段切段)用 -b。处理中文时两种模式切出的位置明显不同,选错模式会得到意外的断点。
fold 会把 URL、Base64、长 token 从中间切断,折行后的文本往往不能再直接解析。对结构化内容做折行前,先把需要的字段提取出来,或者接受折行只是给人看的展示层。
需要「按单词换行、自动补空格让段落整齐」请用 fmt;需要把表格按列对齐请用 column。fold 不补空格也没有词边界判断,一行多长就断在哪里。

易错点

  • 对 JSON/URL 等结构化内容 fold:切在字符串中间,解析直接失败;先提取字段再折行
  • 处理中文却分不清 -b 与列宽模式:两种模式切点不同,按错模式得到乱码或断行错位
  • 以为 fold 会美化段落:它不重排词序也不补空格,按单词换行请用 fmt
  • 折行后直接当普通文本解析:fold 插入的是真实换行符,原本一行的记录会被切碎
  • 用 fold 处理含制表符的对齐文本:制表符被展开成空格后,原本的对齐关系被破坏

数据来源与参考

  • man 1 fold(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌