如何在Linux上使用Fold命令

Linux Fold命令会使不受控制的输出失效。通过控制输出的宽度来读取宽大的文本块、无穷无尽的字符串和未格式化的流。学会怎么做。

Linux终端中的文本行是如何工作的

Linux战斗的第一条规则:了解你的敌人。那么让我们来定义一下它。到底什么是一行文本?它是一个字符序列-字母、数字、符号和空格-由一个特殊字节结束,表示“开始一个新行”。在Linux和Unix中,换行符(也称为换行符)用作行尾指示符。这是一个十六进制值为0x0a,十进制值为10的字节。

不同的操作系统使用不同的字节值来指示行的结束。Windows使用双字节序列。在Windows文本文件中,换行符紧跟在回车字符之后,十六进制为0x0d,十进制为13。

术语“换行符”和“回车”可以追溯到打字机。纸盘,也就是包裹纸张的圆柱体,安装在一辆可移动的马车上。每按一次键,车厢就会向左移动一个字符的宽度。要开始一条新的生产线,您需要推动一个杠杆将托架拉回原来的位置,然后旋转滚筒并将纸张向上移动一行的高度。这个动作被称为回车,圆柱体的旋转(和纸张的推进)被称为换行符。

打字机通电时,操纵杆被一把钥匙取代了。钥匙上标有“回程”或“直接回程”的标签。一些早期的计算机,如BBC Micro,仍然在我们现在所说的Enter键上使用名称Return。

通常情况下,您看不到换行符。你只能看到他们的效果。换行符强制显示或处理文本的软件开始换行。

但是排长队有什么问题呢?

没有换行符或换行符很少的文本将太宽,无法在终端窗口中轻松阅读。那很烦人,但这是可行的。

一个更有害的问题是必须处理太长的行,以至于它们会给需要处理、传输或接收文本的软件带来问题。这可能是由无法调整的内部缓冲区长度或软件的其他方面造成的。

不过,有个办法可以解决这个问题,叫做折叠。

折叠的第一步

让我们来看一下文本中有非常、非常长的行的一部分。请注意,我们这里讨论的不是句子。(虽然文本出自赫尔曼·梅尔维尔的“白鲸”,但我们两全其美。)

文本行是从最后一个换行符(如果是文件中的第一行,则是文件的开头)一直到下一个换行符的所有内容,而不管中间是什么。该行可能包含许多句子。它可能会在终端窗口中绕转多次。但它仍然是单行文本。

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

更少的Moby-dick.txt

文本以小于以下的形式显示:

文本从窗口的一个边缘延伸到另一个边缘,换行符很难看,它们在中间打断单词。

我们有另一个包含短行的文件版本:

较少的短行-Moby-dick.txt

此文件中的行要短得多。每行都以换行符结尾。

如果我们使用十六进制转储命令,我们可以查看文件中的字节值和换行符。-C(规范)选项设置输出格式,使其在显示主体中显示十六进制值,同时在旁边的列中显示等效文本。我们将通过管道将输出转换为更少:

HEXDUMP-C短行-Moby-dick.txt|更少

通过按正斜杠“/”,您将进入Less的搜索功能。键入“0A”,然后按Enter键。换行符将在文本中突出显示。您可以滚动文件并查看它们出现的位置。如果需要,您可以使用向左箭头和向右箭头键横向滚动输出。

在每行末尾使用换行符本身可能是一种限制。无论哪个程序或窗口显示此文本,行都不能适应宽度比行本身更宽的窗口。行长已被换行符限制。

所以长线和短线都有问题。

减少排长队

Fold命令有一个选项-w(宽度),允许您为文本部分指定新的最大宽度。我们将显示最大宽度为50个字符的“白鲸”文本:

Fold-w 50 Moby-dick.txt

文本将以新的最大文件长度显示在终端窗口中。原始文件不会更改。只有Fold的输出才会重新格式化。

乍一看,这看起来好多了。但在行尾的中间,单词仍在分裂。它绝对更容易阅读,但一些令人尴尬的分词令人不舒服。

虽然看起来文本的右边距上下摆动,但所有行长都是相同的。看起来比其他行短一个字符的行恰好以空格字符结尾。

在空间拆分线

我们可以使用-s(空格)选项来确保行只在空格字符上拆分,并且没有单词在两行之间断开。

Fold-w 50-s Moby-dick.txt

现在,输出的右边页边距参差不齐,但更容易阅读。所有的单词都在它们开始的行上结束。

让短线变长

除了使长线变短之外,我们还可以使用Fold来删除短线的强制线长度。

Fold-w 75短行-Moby-dick.txt

换行符将被删除,文本现在在分配的最大长度或之前换行。

使变革永久化

文件夹无法修改原始文件。如果您希望保留更改,则必须将Fold中的输出重定向到新文件中。我们将输出重定向到名为“Modified-Moby-dick.txt”的文件中。

Fold-w 75-s短线-Moby-dick.txt>Modified-Moby-dick.txt

让我们来看看我们的新文件:

修改较少-Moby-dick.txt

我们的新文件看起来怎么样?

文本现在整齐地以我们的新行宽换行,该宽度比原始文件的行长宽。

对流使用折叠

我们可以使用Fold重新格式化文本流。它不仅限于处理文件。让我们看看Jouralctl工具的原始输出是什么样子。f(跟随)选项显示systemd日志中的最新条目,并在新条目到达时进行更新。

sudo Journal alctl-f

输出在终端窗口的边缘换行。

它看起来还不错,但为了演示起见,让我们稍微缩小一下它的宽度。我们将通过管道将Jouralctl的输出输出到Fold中。我们将最大宽度设置为65个字符,并且仅在空格上换行。

sudo Journal alctl-f|fold-w 65-s

显示屏看起来不那么令人惊叹,触摸起来也更整洁一些。

实心文本的墙看起来似乎是无法穿透的。他们令人不快,令人疲惫不堪。当你需要能够从树上看到木头的时候,叫上折叠,并施加一点秩序。

相关文章