如何在Linux上使用rev命令
Linux的rev
命令可反转文本字符串。该命令可以对提供的文本或者文件进行操作,这看似简单。但是,像许多命令行实用程序一样,当我们将其与其他命令结合使用时,它的真正功能将变得显而易见。
" rev"命令是那些简单的Linux实用程序之一,乍一看似乎有些奇怪。它执行一个功能:反转字符串。除了能够打印快速帮助页面(-h
)并向我们显示其版本号(-V
)之外,它不接受任何命令行选项。
那么,rev
反转字符串,就是这样吗?没有变化或者选择?好吧,是的,不是。是的,它没有排列,但不是,仅此而已。本教程向我们展示如何将其组合以进行强大的操作。
当我们将rev
用作更复杂的命令序列的基本组成部分时,它确实开始显示其价值。rev
是一组促进者的命令之一(如tac和yes)。当我们了解它们如何使其他命令的使用效率更高时,更容易意识到它们的用处。
使用rev命令
在没有其他参数的命令行上使用,rev
接受任何类型的输入,将其反转,然后在终端窗口中打印。它会一直这样做,直到我们按Ctrl + C退出为止。
rev
如果键入一些文本并按Enter,则除非我们提供回文,否则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(字符)选项告诉
cut
从字符串中返回一系列字符。" 2-"选项告诉
cut
返回从字符2到行尾的字符范围。如果提供了第二个数字,例如" 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
,后者反转字符串,因此它恢复了其原始顺序。
因为我们提取了反向字符串的第一个单词,所以我们修剪掉了原始字符串的最后一个单词。句子的最后一个词是单词,它已为我们打印出来。
整理文件中的内容
假设我们有一个包含文件名列表的文件,文件名用引号引起来。我们要从文件名中删除引号。
让我们看一下文件:
less filelist.txt
该文件的内容以less
的形式显示给我们。
我们可以使用以下命令从每行的两端删除标点符号。此命令同时使用rev和cut两次。
rev filelist.txt | cut -c 2- | rev | cut -c 2
列出的文件名不带引号。
该命令分解如下:
rev
反转文件中的行并将它们通过管道传递到cut
中。-c(字符)选项告诉
cut
从每一行返回一个字符序列。" 2-"选项告诉
cut
返回从字符2到每行结尾的字符范围。反转的字符串减去它们的第一个字符,将传递给`rev'。
rev
反转字符串,因此它们恢复了原始顺序。他们第二次被传送到" cut"中。-c(字符)选项告诉
cut
从每个字符串中返回一个字符序列。" 2-"选项告诉
cut
返回从字符2到每行结尾的字符范围。这会跳过引号,即每行上的第一个字符。
大量管道
这是一条返回当前目录中每个文件扩展名的排序列表的命令。它使用五个不同的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),则会列出整个文件名。
要给它画龙点睛,请将-c
(count)命令行选项添加到uniq
命令中。
ls | rev | cut -d'.' -f1 | rev | sort | uniq -c
现在,我们在当前目录中获得了不同文件类型的排序列表,每种都有一个计数。