有人可以回答下面的问题吗?
注意:(由于我无法将粘贴从我的 Linux 虚拟盒复制到 Windows,所以我必须在某些地方使用屏幕截图,请原谅)
引用我的教科书
$ cat -n /etc/ profile | pr -d | lpr
结果应该是打印输出,可以方便地记录配置文件。但需要注意的是:如果文件包含长度接近或超过 80 个字符的行,则结果可能是跨两行的单行。结果将破坏页面边界。作为解决方法,您可以使用 -l 设置稍短的页面长度并使用 -f 以确保打印机在每页之后接收换页:
$ cat -n /etc/ profile | pr -dfl 50
那么上述情况是否意味着单行超过 80 个字符?如果是,那么我已经尝试过一个场景;其中我有一行 100 个字符,我无法注意到 pr 命令中是否有 dfl 参数有任何区别。以下是屏幕截图。
和dfl
没有dfl
这两个命令之间的唯一区别是由于 -d 参数而导致的双空格。我希望我的上述问题很清楚。请希望有人解释教科书的引用,其中提到如何处理警告场景?
答案1
Unix 早期的行式打印机(和一些打印终端)被设计为在连续纸张上每页打印 66 行,每行固定宽度字体有 80 或 132 列。lpr
没有格式化其标准输入或文件参数;这取决于其他程序,例如pr
或nroff
进行格式化。 (lpr 还可以将输出发送troff
到照排机)。
为了适应页面之间的折叠并提供大多数人喜欢的顶部和底部边距,每输入 56 行后 pr 将插入 5 个空行作为底部边距,并插入 4 个空行和一个标题行作为顶部边距。如果-f
给出该选项,则在每页底部pr
将输出换页符而不是 5 个空行。打印机通常可以处理换页,它会比一系列空行更快地机械跳到下一页的顶部。 [有一个程序,我忘记了它的名字,它可以格式化 C 源代码,并在每个函数的开头之前插入换页符,这样当您打印出来时,每个函数都从新页面的顶部开始。]
行式打印机通常不会换行长于其设计处理的页面宽度的行。但是打印终端和显示终端(以及当今占主导地位的终端仿真器)可以换行也可以不换行,具体取决于配置。 (更准确地说,您可以配置在最右列打印字符时发生的情况:将光标/打印头保留在最后一列,或将其移动到下一行的第一列)。大多数人更喜欢包装,以免丢失信息。
pr
最初没有对长行进行任何换行;一些较新的版本可以,或者您可以使用该fmt
程序作为过滤器。pr
但是,它支持可配置的页面长度(该-l
选项),因此,如果您使用的是换行的终端或打印机,您可以猜测较小的页面长度,这将导致每页输出 56 或更少的实际行,并告诉您pr
使用它。
这就是你的例子所做的;它告诉pr
假设一个页面有 50 行文本而不是 56 行。如果由于换行而导致多于或少于 6 行额外行,则您不希望pr
插入通常的 5 个空行,因为这会导致对齐失败以下页面;您希望它输出换页符,所以这就是他们-f
在您的示例中添加该选项的原因。