如何在Linux上使用rev命令

时间:2020-01-09 10:39:55  来源:igfitidea点击:

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

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