pr 不直接打印,仅做文本排版;必须通过 lp 或 lpr 才能输出到打印机。其输出含页眉、换页符等格式化内容,但需匹配打印机物理参数(如页长、字体宽度)并正确使用 -F、-l、-t 等选项,否则易出现空白页、截断或错位。

pr 不直接打印,只做排版;真要打出来,必须接 lp 或 lpr。 直接运行 pr file.txt 只会在终端输出带页眉、分页、列宽等逻辑格式化后的文本,不是“打印”,更不会触发打印机硬件动作。
pr 输出为什么没上打印机?
常见错误现象:执行 pr file.txt | lpr 没反应,或打出一堆空白页、页眉错位、内容被截断。
-
pr本身不发指令给打印机驱动,它只生成符合传统行式打印机逻辑的文本流(含页眉、\f换页符等) - 多数现代 CUPS 打印系统能自动识别
\f并切页,但若你用的是-t(去页眉)又没加-F,lpr就可能把整段当一页处理 - 某些打印机驱动对页长敏感:默认
-l 66包含 5 行页眉 + 56 行正文 + 5 行页脚;若实际纸张设置为 A4/60 行,就会多出空白或换页错乱 - 务必确认目标打印机是否支持
\f:测试用printf '\f\f' | lpr看是否真跳页
怎么让 pr 输出真正适合打印?
关键不是“好看”,而是匹配打印机物理能力:固定宽度字体、无换行截断、页边界清晰。
- 用
-F强制输出\f换页符,别依赖空行分页 —— 这是大多数打印机驱动唯一认得的分页信号 - 设
-l 60(A4 常见值)而非默认 66,避免页脚溢出;若用信纸(Letter),可试-l 66 - 长文件名或路径易被硬截断:加
-w 120扩展总宽,并配-2或-3分栏,比单列更稳 - 避免
-d(双倍行距):它只是插入空行,CUPS 可能忽略,且破坏行号对齐;真要加空行,用awk '{print $0 "\n"}'预处理 - 标题用
-h "Report-2026",别留空格或特殊字符,部分驱动解析失败会丢整页
管道里用 pr 容易踩哪些坑?
命令链中 pr 的行为和单独跑文件完全不同,尤其涉及列布局和行号时。
-
ls /usr/bin | pr -2 -t必须带-t:否则页眉会插在两列中间,破坏对齐 -
-n和-2不能直接混用:pr -2 -n是每列独立编号(左列 1,2,3… 右列 1,2,3…),不是全局 1,2,3…;要全局行号,先nl -w3 file | pr -2 -t -
-a(水平填列)和-2组合时,输入第 1 行→左列第 1 行,第 2 行→左列第 2 行,不是左右交替——这点和直觉相反,容易误判输出顺序 -
pr -w 80 -3中-w是总宽,三列各约 26 字符;超长行会被硬切,不换行;若需保留完整路径,宁可减列数、增-w,别靠-e扩展制表符(兼容性差)
真正容易被忽略的页长逻辑
-l 40 指“每页共 40 行”,但这个数字是否包含页眉页脚,取决于是否用了 -t 或 -F。
- 没
-t时:-l 40= 5 行页眉 + 30 行正文 + 5 行页脚 - 有
-t时:-l 40= 纯正文 40 行,无页眉页脚 - 有
-F时:-l 40= 3 行页眉 + 34 行正文 + 换页符(\f),页脚被\f替代 - 测试前务必用
pr -l 10 -F file.txt | hexdump -c看结尾是否有\f,而不是只看终端显示



















