Linux 的 rev
命令用于颠倒文本字符串。这个命令可以对文本或文件内容进行操作,表面上看起来很简单。 然而,就像很多命令行工具一样,当与其他命令结合使用时,它真正的威力才能显现出来。
rev
命令是那些看似简单却又有点特殊的 Linux 工具之一。它只执行一个功能:反转字符串。 除了能打印简短的帮助信息(-h
)并显示版本号(-V
)之外,它不接受任何其他命令行选项。
那么,rev
就是简单地反转字符串,仅此而已吗?没有其他变化或选项? 答案是,既是也不是。是的,它没有其他排列方式,但也不是完全如此。本教程将向您展示如何将 rev
与其他命令组合起来,实现强大的文本处理功能。
当您在更复杂的命令序列中使用 rev
作为构建模块时,它的价值就真正体现出来了。rev
是一组命令(例如 tac
和 yes
)中的一员,它们本身是促进者。理解它们如何更有效地与其他命令协同工作后,它们的用途就更容易理解了。
使用 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
,它反转字符串,使其恢复到原始顺序。
由于我们剪掉了反转字符串的第一个字符,所以我们实际上剪掉了原始字符串的最后一个字符。 当然,您可以使用 sed
或 awk
来完成此操作,但这是一种更简洁的语法。
分离最后一个单词
我们可以使用类似的技巧来返回行中的最后一个单词。
此命令与上一个命令类似,也使用了两次 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
中显示出来。
我们可以使用以下命令从每行的两端删除标点符号。此命令同时使用了两次 rev
和 cut
。
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
添加到您首选的命令库中,您很快就会发现它能够简化原本复杂的命令序列。