管道是Linux中进程间通信的一种方式,一个进程可以将自己的数据通过管道传递给另一个进程。
管道是Linux中进程间通信的一种方式,一个进程可以将自己的数据通过管道传递给另一个进程。
在Linux命令行中,可以通过'|'符来创建一个管道,'|'符左侧程序的执行结果,会通过管道成为右侧程序的输入数据。例如:我们可以使用cat程序输出文件的内容,然后通过管道将输出内容传递给less程序:
cat filename | less
将文件内容传递给less程序后,你就可以使用上下方向键以滚动的方式来查看内容,还可以在less中执行搜索内容等操作:
除了less命令外,你还可以使用more命令来查看接收到的管道数据:
cat Filename | more
不过more命令在接收到数据后,只能通过回车键向下滚动数据,无法向上滚动,当按回车查看到数据结尾处时,会自动退出more程序。
如果你想在一大段文档信息中查找指定的内容,就可以使用grep命令。该命令会扫描整个文档,并将文档中需要查找的信息,以你希望的格式显示出来。该命令的格式如下:
grep search_string
上面的search_string表示需要搜索的字符串,例如下面这个例子:
上例中,先通过cat读取sample文件的内容,再将文件内容通过管道传递给grep程序,grep会扫描整个文件内容,并将包含'Apple'和'Eat'的文本行给显示出来,默认情况下,它还对搜索字符串进行了高亮处理。
该命令还包含一些有用的选项,如下表所示:
选项 | 功能描述 |
---|---|
-v | 将所有不包含搜索字符串的行显示出来 |
-c | 只显示搜索到的行数 |
-n | 显示搜索到的行和对应的行号 |
-i | 搜索时不区分大小写 |
-l | 只显示搜索来源对应的文件名 |
例如,我们可以使用-i参数进行不区分大小写的搜索操作:
sort命令可以按字母顺序来排列文件的内容,该命令的格式如下:
sort Filename
Filename是要进行排序的文件名,假设有个名为'abc'的文件的内容如下:
那么使用sort命令对该文件的内容进行排序,得到的结果会是:
该命令也支持一些选项,可以扩展此命令的能力,如下表所示:
选项 | 功能描述 |
---|---|
-r | 反向排序,如果正常排序是a,b,c,那么反向排序就会是c,b,a |
-n | 以数字类型排序,当文件的内容都是数字形式时,就适合用这种方式来排序 |
-f | 排序时不区分大小写 |
下面例子显示了通过sort命令和-r参数来进行反向排序:
我们可以通过管道,将数据一层层的传递下去,每层做一个处理,从而通过一条命令来得到最终所需的结果。
例如,我们可以先通过cat命令获取文件的内容,再通过管道将文件内容传递给grep,用grep筛选出指定内容,最后将grep筛选的结果再通过管道传递给sort程序,由sort对grep的结果进行排序处理,如下所示: