Unix / Linux - 管道和过滤器

在本章中,我们将详细讨论Unix中的管道和过滤器.您可以将两个命令连接在一起,以便一个程序的输出成为下一个程序的输入.以这种方式连接的两个或多个命令形成一个管道.

要制作管道,在两个命令之间的命令行上放置一个垂直条(| ) .

当程序从另一个程序获取输入时,它会对该输入执行一些操作,并将结果写入标准输出.它被称为 过滤器 .

grep命令

grep命令在一个或多个文件中搜索具有特定模式的行.语法为 :

$ grep pattern file(s)

名称"grep"来自ed(Unix行编辑器)命令 g/re/p ,这意味着"全局搜索正则表达式并打印包含所有行它是".

正则表达式是一些纯文本(例如一个单词)和/或用于模式匹配的特殊字符.

grep的最简单用法是寻找由单个单词组成的模式.它可以在管道中使用,以便只将包含给定字符串的输入文件的那些行发送到标准输出.如果你没有给grep一个文件名来读取,它会读取它的标准输入;这就是所有过滤程序的工作方式和减去;

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

您可以使用各种选项以及 grep 命令 :

Sr.No.选项&描述
1

-v

打印所有与模式不匹配的行.

2

-n

打印匹配的行及其行号.

3

-l

仅打印名称匹配行的文件(字母"l")

4

-c

仅打印匹配行数.

5

-i

匹配大写或小写.

现在让我们使用一个正则表达式告诉grep找到"carol"的行,然后是零或其他常规缩写的字符表达为".*"),然后是"Aug". :

在这里,我们使用 -i 选项进行不区分大小写的搜索 :

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

sort命令

sort 命令按字母顺序或数字顺序排列文本行.以下示例对食物文件中的行进行排序 :

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

sort 命令默认按字母顺序排列文本行.有很多选项可以控制排序和减去;

Sr.No.描述
1

-n

排序数字(例如:10将在2之后排序),忽略空格和制表符.

2

-r

反转排序顺序.

3

-f

一起排序大写和小写.

4

+ x

排序时忽略第一个 x 字段.

可以将两个以上的命令链接到管道中.使用 grep 获取前一个管道示例,我们可以按大小顺序对8月份修改的文件进行进一步排序.

以下管道包含命令 ls grep sort :

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

此管道按大小顺序对8月份修改的目录中的所有文件进行排序,并将其打印在终端屏幕上.排序选项+ 4n跳过四个字段(字段由空格分隔),然后按数字顺序对行进行排序.

pg和更多命令

您通常可以在屏幕上压缩长输出,但如果您通过更多文本运行文本或使用 pg 命令作为过滤器;一旦屏幕充满文字,显示就会停止.

假设您有一个长目录列表.为了更容易阅读已排序的列表,通过更多管道输出如下 :

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

一旦屏幕充满了由按文件大小顺序排序的行组成的文本,屏幕就会填满.在屏幕的底部是更多提示,您可以在其中键入命令以浏览已排序的文本.

完成此屏幕后,您可以使用更多程序讨论中列出的任何命令.