Linux 中的 Pipe,Grep 和 Sort 命令

什么是 Linux 中的管道

管道是 Linux 中的一个命令,它允许你使用两个或多个命令,以便一个命令的输出作为下一个命令的输入。简而言之,每个进程的输出像管道一样直接作为输入到下一个。符号 | 表示管道。

管道可帮助你同时混合两个或多个命令并连续运行它们。你可以使用功能强大的命令,可以快速执行复杂的任务。

让我们用一个例子来理解这一点。

当你使用 cat 命令查看跨越多个页面的文件时,提示会快速跳转到文件的最后一页,而你在中间看不到内容。

为避免这种情况,你可以将 cat 命令的输出传递给 less,这样一次只能显示一个滚动长度的内容。

cat filename | less 

pgmore 命令

你也可以使用 pg,而不是 less

cat Filename | pg 

或者

cat Filename | more

这样,你可以悠闲地查看文件,只需按Enter键向下滚动即可。

$ cat Filename | more
First
Second
Third
--More--

grep 命令

假设你要从文本文件中搜索特定的邮政编码,当然你可以自己手动浏览内容以查找信息。但更好的选择是使用 grep 命令。它将扫描文档以获取所需信息,并以你想要的格式显示结果。

grep search_string

举个例子,

$ cat testfile | grep Monday
Monday

在这里,grep 命令搜索文件 testfile,搜索字符串 Monday

以下选项可与此命令一起使用。

选项 功能
-v 显示与搜索到的字符串不匹配的所有行
-c 仅显示匹配行的数量
-n 显示匹配的行及其编号
-i 匹配时不区分大小写
-l 仅显示含有字符串的文件名

让我们试一下在同一个文件上面使用第一个选项 -i

使用 -i 选项,grep 已从所有行中过滤出字符串 a(不区分大小写)。

$ cat testfile | grep -i a
Apple
Banana
Goat

sort 命令

此命令有助于按字母顺序排序文件内容。

该命令的语法是:

sort Filename

比如文件 abc 的内容是,

dishan@vultr:~$ cat abc
a
b
c
d
e

使用 sort 命令

dishan@vultr:~$ sort abc
a
b
c
d
e

这个命令的选项如下,

选项 功能
-r 反转排序
-n 按数字排序
-f 不区分大小写的排序

下面的例子将文件 abc 中内容反向排序。

dishan@vultr:~$ sort - r abc
e
d
c
b
a

什么是过滤器?

Linux 有很多过滤命令,如 awkgrepsedspellwc。过滤器从一个命令获取输入,进行一些处理,并给出输出。

当你管道两个命令时,第一个命令的过滤输出将被赋予下一个命令。

让我们借助一个例子来理解这一点。

文件 sample 的内容是,

dishan@vultr:~$ cat sample
Cat
Tiger
Apple
Poes
Banana
Drink

我们想列出不包含字符 a 的行,但结果按反顺排列。

为此,可以使用以下语法。

cat sample | grep -v a | sort - r

让我们看看结果。

dishan@vultr:~$ cat sample | grep -v a | sort - r
Drink
Poes
Tiger
Poes

复习:

  • 管道 | 发送一个命令的输出作为另一个命令的输入。
  • 过滤器从一个命令获取输入,进行一些处理,并给出输出。
  • grep 命令可用于在文本文档中查找字符串和值
  • 通过 grep 的管道是最常用的用法之一
  • sort 命令按字母顺序排序文件内容
  • lesspgmore 命令用于将长文件分成可读位