linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > Shell管道和过滤器

Shell管道和过滤器的使用

作者:Charge8

本文主要介绍了Shell管道和过滤器的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、Shell管道

Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。

重定向和管道的区别:

命令格式如下:

command > file
command1 | command1

1、Shell管道

Linux 管道使用竖线|连接多个命令,这被称为管道符。Linux 管道的具体语法格式如下:

command1 | command2
command1 | command2 [ | commandN... ]

当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道。

大部分的 Linux 命令都可以用来形成管道。

注意:

示例1:将 ls 命令的输出发送到 grep 命令

[root@centos7 tmp]#  ls -al | grep test.sh
-rw-r--r--   1 root root  168 3月   3 12:27 test.sh

示例2:将上述管道命令的输出结果发送到文件 output.txt 中

[root@centos7 tmp]# ls -al | grep test.sh  >output.txt
[root@centos7 tmp]# cat output.txt
-rw-r--r--   1 root root  168 3月   3 12:27 test.sh

示例3:查看指定程序的进程运行状态,并将输出重定向到文件中。

[root@centos7 tmp]# ps aux | grep httpd > /tmp/ps.output

2、管道与输入重定向

输入重定向操作符<可以在管道中使用,以用来从文件中获取输入,其基本语法:

command1 < input.txt | command2
command1 < input.txt | command2 -option | command3

示例:使用 tr 命令从 demo.txt 文件中获取输入,然后通过管道将输出发送给 sort 或 uniq 等命令:

[root@centos7 tmp]# cat demo.txt
百度一下
http://www.baidu.com/
shell 重定向
[root@centos7 tmp]# tr a-z A-Z <demo.txt | sort
HTTP://WWW.BAIDU.COM/
SHELL 重定向
百度一下
[root@centos7 tmp]# tr a-z A-Z <demo.txt | sort | uniq
HTTP://WWW.BAIDU.COM/
SHELL 重定向
百度一下
[root@centos7 tmp]#

3、管道与输出重定向

可以使用重定向操作符>或>>将管道中的最后一个命令的标准输出进行重定向,其语法如下所示:

command1 | command2 | ... | commandN > output.txt
command1 < input.txt | command2 | ... | commandN > output.txt

示例:使用 tr 命令将 demo.txt 文件中的内容转化为大写,并使用 sort 命令将内容排序,使用 uniq 命令去除重复的行,最后将输出重定向到文件 demo_new.txt。

[root@centos7 tmp]# tr a-z A-Z <demo.txt | sort | uniq >demo_new.txt
[root@centos7 tmp]# cat demo_new.txt
HTTP://WWW.BAIDU.COM/
SHELL 重定向
百度一下
[root@centos7 tmp]#

二、Shell过滤器

1、Shell过滤器

将几个命令通过管道符组合在一起就形成一个管道。通常,通过这种方式使用的命令就被称为过滤器。过滤器会获取输入,通过某种方式修改其内容,然后将其输出。

过滤器可以概括为以下两点:

常用的被作为过滤器使用的命令如下所示:

在这里插入图片描述

下面通过实例来演示几个过滤器命令的使用。

2、在管道中使用grep命令

grep命令(global search regular expression and print out the line的缩写):用于全面搜索的正则表达式,并将结果输出。

人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵‍活。

语法格式:grep 参数 文件名

常用参数:

在这里插入图片描述

示例1:查看 demo文件中的 www信息。

[root@centos7 tmp]# grep -i "Www" /tmp/demo.txt
http://www.baidu.com/
[root@centos7 tmp]# grep -i "Www" /tmp/demo.txt | less

示例2:查看系统中 HTTP 服务的进程信息。

[root@centos7 tmp]# ps auxwww | grep httpd

示例3:查找我们的程序列表中所有命令名中包含关键字 zip 的命令。

[root@centos7 tmp]# ls /bin /usr/bin | sort | uniq | grep zip
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit
[root@centos7 tmp]#

示例4:查看系统安装的 kernel 版本及相关的 kernel 软件包。

[root@centos7 tmp]# rpm -qa | grep kernel
kernel-headers-3.10.0-957.el7.x86_64
kernel-3.10.0-957.el7.x86_64
kernel-tools-3.10.0-957.el7.x86_64
kernel-tools-libs-3.10.0-957.el7.x86_64
abrt-addon-kerneloops-2.1.11-52.el7.centos.x86_64
[root@centos7 tmp]# 

3、在管道中使用 head 命令

有时,你不需要一个命令的全部输出,可能只需要命令的前几行输出。这时,就可以使用 head 命令.

head命令的功能是显示文件开头的内容,默认为前10行。

语法格式:head 参数 文件名

常用参数:

在这里插入图片描述

示例1:显示 ls 命令的前 10 行输出。

[root@centos7 tmp]# ls /usr/bin | head
[
a2p
ab
abrt-action-analyze-backtrace
abrt-action-analyze-c
abrt-action-analyze-ccpp-local
abrt-action-analyze-core
abrt-action-analyze-oops
abrt-action-analyze-python
abrt-action-analyze-vmcore
[root@centos7 tmp]#

示例2:显示 ls 命令的前 5 行内容。

[root@centos7 tmp]# ls /tmp | head -n 5
demo.txt
err.log
error.log
info.log
output.txt
[root@centos7 tmp]#

4、在管道中使用 wc 命令

wc 命令:wc命令(word count的缩写):其功能是统计文件的字节数、单词数、行数等信息,并将统计结果输出到终端界面。

基本语法格式:wc 参数 文件名

常见参数如下:

在这里插入图片描述

示例1:统计当前登录到系统的用户数。

[root@centos7 tmp]# who | wc -l
1

示例2:统计当前的 Linux 系统中的进程数。

[root@centos7 tmp]# ps -ef | wc -l
121

示例3:显示 ls 命令的前 5 行内容。然后统计当前内容的行数。

[root@centos7 tmp]# ls /tmp | head -n 5 | wc -l
5

到此这篇关于Shell管道和过滤器的使用的文章就介绍到这了,更多相关Shell管道和过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文