如何在 Linux 上使用 fold 命令

在 Linux 系统中,`fold` 命令可以帮助我们处理那些不按常规显示的文本输出。通过控制文本输出的宽度,它可以有效地处理大量的文本数据、无止尽的字符串以及未格式化的数据流。让我们一起深入了解一下如何使用这个命令。

Linux 终端中文本行的运作方式

了解你的“敌人”是 Linux 战斗的第一要则。所以,我们首先需要明确一个概念:什么是文本行?它指的是一个由字符(包括字母、数字、符号和空格)组成的序列,并且以一个特殊的字节结尾,这个字节指示“新的一行开始”。在 Linux 和 Unix 系统中,换行符,也被称为行尾符,被用来标记一行的结束。这个换行符是一个值为 0x0a 的字节,以十六进制表示,十进制值为 10。

不同的操作系统使用不同的字节值来表示一行的结束。例如,Windows 系统采用的是一个双字节序列。在 Windows 文本文件中,换行符后面紧跟着一个回车符,它的十六进制值为 0x0d,十进制值为 13。

“换行”和“回车”这两个术语可以追溯到打字机时代。打字机的压纸滚筒包裹着纸张的圆筒,被安装在一个可移动的托架上。每敲击一个键,托架就会向左移动一个字符的宽度。要开始新的一行,你需要推动一个控制杆,让托架回到初始位置,并同时旋转滚轮,将纸张向上移动一行的高度。这个动作被称为回车,而滚筒的旋转(以及纸张的前进)被称为换行。

随着打字机的电气化,杠杆被按键所取代。这些按键被标记为回车或者仅仅是Return。一些早期的计算机,比如BBC Micro,在我们现在称作 Enter 键的按键上仍然使用了 Return 这个名称。

通常情况下,我们无法直接看到换行符,只能看到它们所产生的结果。换行符会强制显示或处理文本的软件开始新的一行。

长行带来的问题

没有换行符或者换行符很少的文本会显得非常宽,以至于在终端窗口中难以舒适地阅读。虽然这很让人恼火,但还在可接受的范围内。

然而,一个更严重的问题是,过长的文本行可能会给处理、传输或接收文本的软件带来麻烦。这可能是由于内部缓冲区长度或其他一些我们无法调整的软件限制造成的。

不过,有一个解决方法可以应对这个问题,那就是文本折叠。

文本折叠的第一步

现在,让我们来看一段文本,其中包含非常非常长的行。请注意,我们这里讨论的并不是句子。(尽管文本内容选自赫尔曼·梅尔维尔的《白鲸》,所以我们既能看到文本行的问题,也能欣赏到文学作品。)

一行文本,从最后一个换行符(或者如果是文件中的第一行,则从文件开头)开始,一直到下一个换行符结束,无论中间包含什么内容。这一行文本可能包含许多句子,也可能在终端窗口中绕了好几圈,但它仍然被视为一行。

让我们看看原始形式的文本:

less moby-dick.txt

文本在 less 中显示如下:

文本从窗口的一端延伸到另一端,换行非常不美观,它们直接将单词从中截断。

我们还有一个短行文件的版本:

less short-lines-moby-dick.txt

这个文件中的行要短得多。每行都以换行符结束。

如果我们使用 `hexdump` 命令,我们可以查看文件中的字节值,并检查换行符。 `-C` (canonical) 选项会格式化输出,以便在主目录中显示十六进制值。