深入解析:Linux系统之pr 命令详解
pr 命令详解
一、命令概述
pr(全称 print formatter)是 GNU coreutils 中的文本格式化工具,核心功能是将文本文件转换为适合打印的格式,支持分页、分栏、添加页眉页脚、行号标注等操作。它可处理单个/多个文件,默认从标准输入(STDIN)读取内容,输出格式化后的文本(默认到标准输出 STDOUT,可重定向到打印机或文件)。
pr 是 Unix/Linux 系统中历史悠久的打印辅助工具,常用于预处理日志、报告、代码等文本,使其排版更规范(如每页固定行数、多列并行显示),便于打印或阅读。
二、命令语法
pr [OPTION]... [FILE]...
- 选项:控制格式化行为(分页、分栏、页眉等),支持短选项(如
-d)和长选项(如--double-space),部分选项需带参数; FILE:待处理的文本文件路径(可多个,用空格分隔);若未指定FILE或FILE为-,则从 标准输入 读取内容;- 输出:默认输出到标准输出,可通过重定向(
>)保存到文件或发送到打印机(如| lpr)。
三、选项详解
pr 选项繁多,按功能分类整理,便于快速定位需求。每个选项标注 短选项(若有)、长选项、功能描述、关键说明及示例,重点覆盖常用场景。
3.1 分页控制选项
用于定义页面大小、分页符及是否显示页眉页脚,是 pr 的核心功能之一。
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
+FIRST_PAGE[:LAST_PAGE]--pages=FIRST_PAGE[:LAST_PAGE] | 指定打印的页码范围:从 FIRST_PAGE 开始,可选 LAST_PAGE 结束(不指定则打印到最后一页)。 | 页码从 1 开始;示例:pr +2:5 report.txt(打印 report.txt 的第 2-5 页) |
-l PAGE_LENGTH--length=PAGE_LENGTH | 设置每页的总行数(默认 66 行),其中默认文本行数 56 行(含页眉页脚);若用 -F,文本行数 63 行。 | 示例:pr -l 40 notes.txt(设置每页 40 行) |
-F-f--form-feed | 用 换页符(\f) 分隔页面,而非默认的换行符; - 带 -F:页眉占 3 行;- 无 -F:页眉 5 行 + 页脚(默认)。 | 适合打印机自动分页;示例:pr -F log.txt(用换页符分隔 log.txt 的页面) |
-T--omit-pagination | 完全省略分页:不显示页眉页脚,且清除输入中的换页符(取消所有分页逻辑)。 | 示例:pr -T code.c(输出 code.c 且不分页、无页眉) |
-t--omit-header | 仅省略页眉页脚,保留分页(按 --length 分页);若 PAGE_LENGTH ≤ 10,-t 会自动生效。 | 示例:pr -t -l 20 data.txt(每页 20 行,无页眉页脚) |
3.2 分栏设置选项
支持将文本按多列显示,适合紧凑排版(如目录、列表),可控制列的排列方向(纵向/横向)和分隔符。
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-COLUMN--columns=COLUMN | 设置分栏数(默认 1 列),默认纵向排列(填满一列再填下一列)。 | 示例:pr -2 list.txt(将 list.txt 分为 2 列,纵向排列) |
-a--across | 与 --columns 配合使用,改为横向排列(填满一行的所有列再换行)。 | 示例:pr -a -3 names.txt(3 列横向排列,先填第1列第1行→第2列第1行→第3列第1行,再填下一行) |
-m--merge | 并行打印多个文件:每个文件占一列,行数按最长文件对齐,短文件末尾补空行;默认截断超长行。 | 示例:pr -m file1.txt file2.txt(file1 左列,file2 右列,并行显示) |
-J--join-lines | 与 -m 配合,合并多文件的完整行(不截断),且关闭 -W 的行截断;需用 --sep-string 设置列分隔符。 | 示例:`pr -J -m --sep-string=" |
-s[CHAR]--separator[=CHAR] | 设置分栏的分隔符(默认:无 -w 时为 TAB,有 -w 时无分隔符);CHAR 为单个字符(如 ,、` | `)。 |
-S[STRING]--sep-string[=STRING] | 设置分栏的分隔字符串(支持多字符);默认: - 与 -J 配合:TAB;- 其他场景:空格。 | 示例:`pr -3 -S" |
3.3 格式调整选项
控制文本的行距、缩进、页面宽度,优化排版效果。
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-d--double-space | 双行距输出(每行后空一行)。 | 示例:pr -d essay.txt(双行距显示 essay.txt) |
-o MARGIN--indent=MARGIN | 每行缩进 MARGIN 个空格(默认 0),缩进不影响 --width/--page-width 的计算(缩进会附加到页面宽度)。 | 示例:pr -o 4 notes.txt(每行缩进 4 个空格) |
-w PAGE_WIDTH--width=PAGE_WIDTH | 设置多列输出的页面宽度(默认 72 字符),仅对多列生效;若用 -s[CHAR],会关闭此默认宽度。 | 示例:pr -2 -w 80 data.txt(2 列,页面宽 80 字符) |
-W PAGE_WIDTH--page-width=PAGE_WIDTH | 设置所有输出的页面宽度(默认 72 字符),强制截断超长行;若用 -J,则关闭行截断。 | 示例:pr -W 60 log.txt(页面宽 60 字符,超长行截断) |
3.4 页眉页脚选项
自定义页眉内容、日期格式,使输出更规范(如报告标题、打印日期)。
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-h HEADER--header=HEADER | 设置页眉的居中标题(默认页眉显示文件名、日期、页码);若 HEADER 为 ""(需加引号),页眉显示空行。 | 注意:不可写 -h"",需用 -h "";示例:pr -h "Monthly Sales Report" sales.txt(页眉居中显示“Monthly Sales Report”) |
-D FORMAT--date-format=FORMAT | 设置页眉中日期的格式,FORMAT 遵循 strftime(3) 规范(如 %Y-%m-%d 表示年-月-日)。 | 示例:pr -D "%Y-%m-%d %H:%M" -h "Log" log.txt(页眉日期格式为“2024-09-21 15:30”) |
3.5 字符处理选项
显示不可打印字符、转换制表符,便于处理特殊格式的文本(如日志、代码)。
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-c--show-control-chars | 用 脱字符表示法(^G) 和八进制转义(\033)显示不可打印字符(如 Ctrl+G 显示为 ^G)。 | 示例:pr -c script.sh(显示 script.sh 中的控制字符) |
-v--show-nonprinting | 用 八进制转义表示法 显示所有非打印字符(如 Tab 显示为 \011,换行为 \012)。 | 示例:pr -v data.txt(查看 data.txt 中的非打印字符) |
-e[CHAR[WIDTH]]--expand-tabs[=CHAR[WIDTH]] | 将输入中的 CHAR(默认 Tab,\t)展开为 WIDTH(默认 8)个空格。 | 示例:pr -e4 code.c(将 Tab 展开为 4 个空格) |
-i[CHAR[WIDTH]]--output-tabs[=CHAR[WIDTH]] | 将输出中的空格替换为 CHAR(默认 Tab),每 WIDTH(默认 8)个空格替换为一个 CHAR。 | 示例:pr -i4 data.txt(每 4 个空格替换为 Tab) |
3.6 行号标注选项
为文本添加行号,支持自定义行号格式(位数、分隔符)。
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-n[SEP[DIGITS]]--number-lines[=SEP[DIGITS]] | 为每行添加行号: - DIGITS:行号位数(默认 5 位,不足补空格);- SEP:行号与文本的分隔符(默认 Tab,\t)。 | 示例:pr -n" "3 code.c(行号 3 位,分隔符为 2 个空格) |
-N NUMBER--first-line-number=NUMBER | 设置起始行号(默认从 1 开始),需与 --number-lines 配合。 | 示例:pr -n -N 100 log.txt(行号从 100 开始) |
3.7 日志与帮助选项
控制文件错误提示及获取帮助信息。
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-r--no-file-warnings | 当文件无法打开时,不输出警告信息(默认会提示“pr: file.txt: No such file or directory”)。 | 示例:pr -r file1.txt missing.txt(忽略 missing.txt 的不存在警告) |
--help | 打印简短帮助文本,包含选项列表与使用说明,然后退出。 | 示例:pr --help(查看所有选项及默认值) |
--version | 输出 pr 的版本信息(如 GNU coreutils 版本),然后退出。 | 示例:pr --version(查看版本) |
四、常用示例
以下示例覆盖 pr 的核心使用场景,可直接套用或修改参数满足需求。
示例 1:分页并添加自定义页眉
将 report.txt 按默认页长(66 行)分页,页眉显示“Quarterly Report”,日期格式为“年-月-日”:
pr -h "Quarterly Report" -D "%Y-%m-%d" report.txt > report_formatted.txt
- 输出文件
report_formatted.txt的每页页眉包含:居中标题、日期、页码(如Quarterly Report 2024-09-21 Page 1)。
示例 2:多列横向显示列表
将 names.txt 分为 3 列,横向排列(先填一行的 3 列,再换行),用“|”分隔列:
pr -a -3 -s"|" names.txt
- 输入
names.txt内容:Alice Bob Charlie Dave Eve Frank - 输出效果:
Alice|Bob |Charlie Dave |Eve |Frank
示例 3:双行距+行号标注
将 code.sh 按双行距输出,行号 3 位,分隔符为 1 个空格:
pr -d -n" "3 code.sh
- 输出每行开头显示“行号+空格+文本”,且行与行之间空一行。
示例 4:合并多个文件并行显示
将 file1.txt 和 file2.txt 合并为 2 列并行显示,用“ | ”分隔列,不截断超长行:
pr -J -m --sep-string=" | " file1.txt file2.txt
- 若
file1.txt有 3 行,file2.txt有 5 行,输出会补 2 空行使file1列与file2列对齐。
示例 5:无分页+缩进输出
将标准输入的内容(如管道输入)按 4 个空格缩进,不分页、无页眉:
cat data.txt | pr -t -T -o 4
-t省略页眉,-T取消分页,-o 4每行缩进 4 空格,适合快速查看文本。
五、注意事项
默认页面设置:
- 页长默认 66 行(文本 56 行 + 页眉 5 行 + 页脚 5 行),页宽默认 72 字符;
- 若
PAGE_LENGTH ≤ 10,pr会自动启用-t(省略页眉页脚)。
选项交互关系:
-J会关闭-W的行截断(保留完整行);-s[CHAR]会关闭-w的默认页面宽度(72 字符);-m与-a不可同时使用(-m是多文件分栏,-a是单文件多列)。
特殊字符处理:
- 不可打印字符(如控制字符、非 ASCII 字符)需用
-c或-v显示,否则可能导致排版错乱; - Tab 键默认展开为 8 个空格,可用
-e调整展开宽度。
- 不可打印字符(如控制字符、非 ASCII 字符)需用
输出重定向:
若需保存格式化结果,建议重定向到文件(如> formatted.txt),直接输出到打印机需配合lpr(如pr ... | lpr)。

浙公网安备 33010602011771号