前言:pr 到底在干什么?
pr 的全称是 print / preformatter,它的职责是: 将文本文件或标准输入,转换成带页眉/页脚/分页/多栏的“可打印格式”(默认输出到 stdout)。
它不是编辑器(vim/nano),不是分页阅读器(less/more),也不是排版引擎(LaTeX/pandoc)。 它最适合的场景:
- 把日志/报告整理成 带页码、带标题的打印稿,然后直接 pr … | lpr 送打印机
- 把长列表(如 ls -la 的输出)排成 多栏,节约纸张/屏幕空间
- 需要“固定每页行数 + 自动插入页眉”的轻量级预处理
注:你平时用 less 看文件是“原样浏览”;pr 是在生产一份新的排版输出。
目录
-
- 前言:`pr` 到底在干什么?
- 一、先看默认行为(最容易迷惑的地方)
- 二、最常用选项(按功能分组)
-
- 2.1 控制页长度与页眉(最实用)
- 2.2 自定义页眉内容
- 2.3 多栏排版(`pr` 的亮点)
- 2.4 宽度与缩进(控制版面尺寸)
- 三、完整工作流示例(可复现)
-
- 3.1 准备测试数据
- 3.2 对比几种模式
- 四、常见坑位(提升文章深度的关键)
- 五、什么时候用 `pr`,什么时候不用
- 六、总结
一、先看默认行为(最容易迷惑的地方)
pr a.txt
输出会像这样:
Jan 20 14:03 a.txt Page 1
line1
line2
…
关键特征:
- 默认加上 页眉:日期 文件名 Page N
- 默认 每页 66 行(传统打印机一页的高度)
- 页眉占用几行,所以正文并非从第 1 行开始
- 输出直接打到 stdout(终端),看起来好像多了些空行
💡 初学建议:先加 -t 关掉页眉,更容易看清排版效果。
二、最常用选项(按功能分组)
2.1 控制页长度与页眉(最实用)
| -l N | 设置每页行数为 N(默认 66) | -l 40 每页 40 行 |
| -t / –omit-header | 省略页眉页脚(无页号、无文件名) | -t 清爽输出 |
| +FIRST_PAGE | 从第 FIRST_PAGE 页开始输出 | +2 跳过第一页 |
示例:把文件按每页 20 行排版,且不显示页眉
pr -l 20 -t a.txt
2.2 自定义页眉内容
| -h STRING | 将页眉中的“文件名”替换为 STRING |
| -n[CHAR][WIDTH] | 给输出行加行号(GNU 特有) |
示例:自定义页眉为“日志报告”
pr -h "日志报告 2026-06-16" access.log
页眉变为:
Jun 16 10:21 日志报告 2026-06-16 Page 1
2.3 多栏排版(pr 的亮点)
pr -N FILE
将 FILE 内容排成 N 栏(横向填满再往下走)。
示例:三栏显示
pr -3 a.txt
常用搭配:
- -t 去掉页眉
- -l 48 缩短页高便于观察
- -sCHAR 指定栏间分隔符
示例:三栏、用 | 分隔、无页眉
pr -3 -t -s'|' a.txt
注意:pr 的多栏是 先横填再纵排(rows filled across columns),不是先竖排完第一栏再到第二栏。如需纵向优先,请用 column -x 或其他工具。
2.4 宽度与缩进(控制版面尺寸)
| -w WIDTH | 输出总宽度(字符数) |
| -i INDENT | 每页左侧缩进 N 个空格 |
示例:输出宽度 72 字符,左缩进 4 格
pr -w 72 -i 4 -t a.txt
三、完整工作流示例(可复现)
3.1 准备测试数据
seq -w 1 120 | sed 's/^/Line /' > demo.txt
3.2 对比几种模式
# 默认(带页眉)
pr demo.txt | head -20
# 关掉页眉
pr -t demo.txt | head -20
# 三栏 + 无页眉 + 页长40行
pr -3 -t -l 40 demo.txt | head -40
# 自定义标题 + 每页50行
pr -h "Demo Lines" -l 50 demo.txt | head -20
你将直观感受到:
- 默认输出有“Page 1”“Page 2”的分页感
- -t 去掉装饰后,正文被切成“块”
- 多栏模式下,内容先横着填满一行再换行
四、常见坑位(提升文章深度的关键)
把 pr 当成 less 用 pr 不是浏览工具,它在重新排版。想翻页用 less。
误解 -l 20 等于正文 20 行 页眉/页脚会占用行数。想精确控制正文行数,先用 -t 再去掉页眉,再用 -l。
多栏顺序不符合预期 pr -N 是“横向填满再向下”,不是纵向先排完第一栏。如果需要纵向排列,考虑 column -x。
GNU vs BSD 差异 本文基于 GNU coreutils(Linux 默认)。macOS 的 BSD 版 pr 选项略有不同(如 -s 默认分隔符行为),写教程时应注明环境。
-s 不带参数时含义模糊 显式写出分隔符,例如 -s'|' 或 -s' ',避免歧义。
五、什么时候用 pr,什么时候不用
| 需要页眉、页号、分页、多栏的打印稿 | pr |
| 只想在终端翻页查看 | less |
| 把表格对齐(TSV/CSV) | column -t |
| 生成正式 PDF 文档 | pandoc / enscript / a2ps |
六、总结
- pr 的本质:给文本穿上“打印稿纸”的外衣(页眉、分页、多栏)
- 最常用组合:pr -t -l 50 -3 -s'|' file(无页眉、每页50行、三栏、竖线分隔)
- 输出到文件:pr file > output.txt
- 送打印机:pr file | lpr
适用环境:任何 Linux/Unix 系统(GNU coreutils 版本),特别适合需要批量处理文本打印或归档的场景。




