如何在 Linux 上使用 rev 命令

Linux 的 rev 命令用于颠倒文本字符串。这个命令可以对文本或文件内容进行操作,表面上看起来很简单。 然而,就像很多命令行工具一样,当与其他命令结合使用时,它真正的威力才能显现出来。

rev 命令是那些看似简单却又有点特殊的 Linux 工具之一。它只执行一个功能:反转字符串。 除了能打印简短的帮助信息(-h)并显示版本号(-V)之外,它不接受任何其他命令行选项

那么,rev 就是简单地反转字符串,仅此而已吗?没有其他变化或选项? 答案是,既是也不是。是的,它没有其他排列方式,但也不是完全如此。本教程将向您展示如何将 rev 与其他命令组合起来,实现强大的文本处理功能。

当您在更复杂的命令序列中使用 rev 作为构建模块时,它的价值就真正体现出来了。rev 是一组命令(例如 tacyes)中的一员,它们本身是促进者。理解它们如何更有效地与其他命令协同工作后,它们的用途就更容易理解了。

使用 rev 命令

在没有任何其他参数的情况下,直接在命令行中使用 rev,它可以接受任何类型的输入,将其反转,然后在终端窗口中打印出来。 它会持续执行此操作,直到您按下 Ctrl+C 退出。

rev

如果您输入一些文本并按下回车键,rev 会反向打印该字符串 – 除非您输入的是一个回文,当然。

将文本传递给 rev

您可以使用 echo 命令将文本传递给 rev

echo one two three | rev

您还可以使用 rev 逐行反转整个文本文件的内容。 在这个例子中,我们有一个包含文件名列表的文件。 这个文件名为 “filelist.txt”。

rev filelist.txt

它会从文件中读取每一行,将其反转,然后打印到终端窗口。

rev 与其他命令结合使用

这是一个使用两次调用 rev 的管道输入的示例。

此命令可以从文本字符串中删除最后一个字符,这对于去除标点符号可能很有用。 我们需要使用 cut 命令来剥离字符

echo 'Remove punctuation.' | rev | cut -c 2- | rev

让我们来分解一下:

echo 将字符串发送给第一次调用的 rev
rev 反转字符串,并通过管道将其传递给 cut
-c (characters) 选项告诉 cut 从字符串中返回一个字符序列。
2- 选项告诉 cut 返回从第二个字符到行尾的字符范围。如果提供了第二个数字,例如 2-5,则范围为字符 2 到 5。没有第二个数字表示 “直到字符串的末尾”。
反转后的字符串(减去第一个字符)被传递给 rev,它反转字符串,使其恢复到原始顺序。

由于我们剪掉了反转字符串的第一个字符,所以我们实际上剪掉了原始字符串的最后一个字符。 当然,您可以使用 sedawk 来完成此操作,但这是一种更简洁的语法。

分离最后一个单词

我们可以使用类似的技巧来返回行中的最后一个单词。

此命令与上一个命令类似,也使用了两次 rev。 不同之处在于选择文本部分的方式使用了 cut 命令。

echo 'Separate the last word' | rev | cut -d' ' -f1 | rev

以下是命令的分解:

echo 将字符串发送给第一次调用的 rev
rev 反转字符串,并通过管道将其传递给 cut
-d' '(分隔符)选项告诉 cut 返回由空格分隔的字符序列。
-f1 选项告诉 cut 返回不包含分隔符的字符串的第一部分。换句话说,句子从开头到第一个空格的部分。
反转后的第一个单词被传递给 rev,它反转字符串,使其恢复到原始顺序。

由于我们提取了反转字符串的第一个单词,所以我们实际上提取了原始字符串的最后一个单词。 句子的最后一个单词是 “word”,它被打印出来了。

从文件中修剪内容

假设我们有一个包含文件名列表的文件,文件名用引号引起来。 我们想从文件名中删除引号。

让我们看一下这个文件:

less filelist.txt

文件的内容在 less 中显示出来。

我们可以使用以下命令从每行的两端删除标点符号。此命令同时使用了两次 revcut

rev filelist.txt | cut -c 2- | rev | cut -c 2-

文件名列表在没有引号的情况下显示出来。

命令分解如下:

rev 反转文件中的每一行,并通过管道将其传递给 cut
-c (characters) 选项告诉 cut 从每一行返回一个字符序列。
2- 选项告诉 cut 返回从第二个字符到每一行末尾的字符范围。
反转后的字符串(减去第一个字符)被传递给 rev
rev 反转字符串,使它们恢复到原始顺序。然后它们第二次被管道传递给 cut
-c (characters) 选项告诉 cut 从每个字符串中返回一个字符序列。
2- 选项告诉 cut 返回从第二个字符到每一行末尾的字符范围。这实际上 “跳过” 了前导引号,也就是每行中的第一个字符。

多重管道

这是一个返回当前目录中每个文件扩展名排序列表的命令。 它使用了五个不同的 Linux 命令。

ls | rev | cut -d'.' -f1 | rev | sort | uniq

过程很简单:

ls 列出当前目录中的文件。 这些文件名被通过管道传递给 rev
rev 反转文件名,并通过管道将其传递给 cut
cut 返回每个文件名的第一部分,直到一个分隔符。 -d'.' 告诉 cut 使用句点 . 作为分隔符。 直到第一个句点的反转文件名部分是文件扩展名。 这些扩展名被通过管道传递给 rev
rev 将文件扩展名反转回其原始顺序。 然后它们被传递给 sort
sort 对文件扩展名进行排序,并将结果通过管道传递给 uniq
uniq 返回每种类型的唯一文件扩展名的列表。 请注意,如果文件没有文件扩展名 (例如 makefile,Help 和 gc_help 目录),它将列出整个文件名。

为了锦上添花,请在 uniq 命令中添加 -c (count) 命令行选项。

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

现在我们得到了当前目录中不同文件类型的排序列表,每个文件类型都有一个计数。

这是一个相当酷的单行命令!

倒退是为了更好地前进

有时候,您必须后退才能前进。 作为团队的一员,你常常会以最快的速度前进。

rev 添加到您首选的命令库中,您很快就会发现它能够简化原本复杂的命令序列。