linux搜索过滤器,Unix和Linux管道(pipe)和过滤器(filter)使用介绍

上一章Unix和Linux教程请查看:打印文件和发送邮件

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

要生成管道,请在两个命令之间的命令行上放置竖线(|)。当一个程序从另一个程序获取其输入时,它对该输入执行一些操作,并将结果写入标准输出,这个过程被称为过滤器。

一、grep命令

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

$grep pattern file(s)

“grep”这个名称来自ed(一个Unix行编辑器)命令g/re/p,意思是“全局搜索一个正则表达式并打印包含它的所有行”。

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

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

$ ls -l | grep ".so"

-rw-r--r-- 1 user user 232482 5月 20 2017 gson-2.5.jar

-rw-r--r-- 1 user user 13432 10月 20 2015 libhello-jni.so

-rw-r--r-- 1 user user 62684 5月 27 2017 libhello.so

-rwxr-xr-x 1 root root 8678 5月 30 2017 so.m

有多种选项可以与grep命令一起使用:

编号选项 & 描述

1-v

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

2-n

打印匹配的行及其行号。

3-l

仅打印具有匹配行的文件名称(字符“l”)

4-c

只打印匹配行的计数。

5-i

匹配大小写。

现在让我们使用一个正则表达式,它告诉grep查找包含“carol”的行,后跟0或正则表达式中缩写为“.*”的其他字符,然后后跟“Aug”。这里我们使用-i选项来进行不区分大小写的搜索:

$ls -l | grep -i "carol.*aug"

-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros

$

二、sort命令

sort命令按字母或数字顺序排列文本行。下面的示例对food文件中的行进行排序:

$ sort chars

c++ java

earth mars

italino espanol

shell linux

ubuntu redhat

sort命令默认情况下按字母顺序排列文本行。有许多选项可以控制排序:

编号描述

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 C doc 1605 Aug 23 07:35 macros

-rw-rw-r-- 1 S doc 2488 Aug 15 10:51 intro

-rw-rw-rw- 1 S doc 8515 Aug 6 15:30 ch07

-rw-rw-rw- 1 S doc 11008 Aug 6 14:10 ch02

$

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

三、pg和more命令

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

假设你有一个很长的目录清单。为了更容易地读取排序后的清单,将输出通过以下管道传输:

$ls -l | grep "Aug" | sort +4n | more

-rw-rw-r-- 1 C doc 1605 Aug 23 07:35 macros

-rw-rw-r-- 1 G doc 2488 Aug 15 10:51 intro

-rw-rw-rw- 1 G doc 8515 Aug 6 15:30 ch07

-rw-rw-r-- 1 G doc 14827 Aug 9 12:40 ch03

.

.

.

-rw-rw-rw- 1 G doc 16867 Aug 6 15:56 ch05

--More--(74%)

一旦屏幕充满了由按文件大小排序的行组成的文本,屏幕就会被填满。在屏幕的底部是更提示符,你可以在这里输入命令来移动已排序的文本。完成此屏幕之后,可以使用more程序讨论中列出的任何命令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值