Linux管道和过滤器
有时候,我们可以把两个命令连起来使用,一个命令的输出作为另一个命令的输入,这就叫做管道。为了建立管道,需要在两个命令之间使用竖线(|)连接。
管道是Linux进程之间一种重要的通信机制;除了管道,还有共享内存、消息队列、信号、套接字(socket)等进程通信机制。
管道使用竖线(|)将两个命令隔开,竖线左边命令的输出就会作为竖线右边命令的输入。连续使用竖线表示第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。
能够接受数据,过滤(处理或筛选)后再输出的工具,称为过滤器。
grep命令
grep是一个强大的文本搜索工具,可以使用正则表达式,并返回匹配的行,语法为:
正则表达式是一个包含了若干特殊字符的字符串,每个字符都有特殊含义,可以用来匹配文本,更多信息请查看正则表达式教程。
grep可以看做是一个过滤器,如果没有为grep指定要检索的文件,那么它会从标准输入设备(一般是键盘)读取;其他过滤器也是如此。
grep命令最简单的使用就是检索包含固定字符的文本。
例如,在管道中使用grep命令,只允许包含指定字符的行输出到显示器:
-rw-rw-rw-1johndoc11008Aug614:10ch02
-rw-rw-rw-1johndoc8515Aug615:30ch07
-rw-rw-r--1johndoc2488Aug1510:51intro
-rw-rw-r--1caroldoc1605Aug2307:35macros
$
grep命令有很多选项:
选项说明-v反转查询,输出不匹配的行。例如,grep-v"test"demo.txt将输出不包含"test"的行。-n输出匹配的行以及行号。-l输出匹配的行所在的文件名。-c输出匹配的总行数。-i不区分大小写进行匹配。下面我们使用正则表达式来匹配这样的行:包含字符“carol”,然后包含任意数目(含零个)的其他字符,最后还要包含“Aug”。
使用-i选项进行不区分大小写的匹配:
-rw-rw-r--1caroldoc1605Aug2307:35macros
$
sort命令在Linux中非常有用,它将文件中的各行按字母或数进行排序。sort命令既可以从特定的文件,也可以从stdin获取输入。
例如,对foot文件的各行进行排序:
AfghaniCuisine
BangkokWok
BigAppleDeli
IsleofJava
Mandalay
SushiandSashimi
SweetTooth
TioPepe'sPeppers
$
选项描述
-n按照数字大小排序,例如,10会排在2后面;-n选项会忽略空格或tab缩进。
-r降序排序。sort默认是升序排序。
-f不区分大小写。
+x对第x列(从0开始)进行排序。
下面的例子通过管道将ls、grep和sort命令连起来使用,过滤包含“Aug”的行,并按照文件大小排序:
-rw-rw-r--1caroldoc1605Aug2307:35macros
-rw-rw-r--1johndoc2488Aug1510:51intro
-rw-rw-rw-1johndoc8515Aug615:30ch07
-rw-rw-rw-1johndoc11008Aug614:10ch02
$
pg和more命令
如果文件内容过多,全部显示会很乱,可以使用pg和more命令分页显示,每次只显示一屏。
例如,通过管道,使用more命令显示目录中的文件:
-rw-rw-r--1caroldoc1605Aug2307:35macros
-rw-rw-r--1johndoc2488Aug1510:51intro
-rw-rw-rw-1johndoc8515Aug615:30ch07
-rw-rw-r--1johndoc14827Aug912:40ch03
.
.
.
-rw-rw-rw-1johndoc16867Aug615:56ch05
--More--(74%)