Shell管道和过滤器的使用

 更新时间:2024年03月05日 11:39:58   作者:Charge8  
本文主要介绍了Shell管道和过滤器的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、Shell管道

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

重定向和管道的区别:

  • 重定向操作符>将命令与文件连接起来,用文件来接收命令的输出;
  • 管道符|将命令与命令连接起来,用第二个命令来接收第一个命令的输出。

命令格式如下:

command > file
command1 | command1

1、Shell管道

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

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

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

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

注意:

  • 管道里面的 command只能处理其正确的输出结果。
  • 管道符|与两侧的命令之间也可以不存在空格,但是推荐在管道符|和两侧的命令之间使用空格,以增加代码的可读性。

示例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过滤器

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

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

  • 如果一个 Linux 命令是从标准输入接收它的输入数据,并在标准输出上产生它的输出数据(结果),那么这个命令就被称为过滤器。
  • 过滤器通常与 Linux 管道一起使用。

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

在这里插入图片描述

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

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管道和过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • shell脚本批量创建用户的方法小结

    shell脚本批量创建用户的方法小结

    有些面试题中会问到批量创建用户的题目,大体是用循环去进行创建,但有时也会有一些额外的附加条件,下面这篇文章主要给大家介绍了关于shell脚本批量创建用户的相关资料,需要的朋友可以参考下
    2022-03-03
  • Linux shell脚本基础学习详细介绍(完整版)

    Linux shell脚本基础学习详细介绍(完整版)

    Linux shell脚本基础学习我们将分几讲来慢慢细说,希望能对想学习Linux shell脚本编程的初学者有一个明确的帮助,水平得到提高
    2013-07-07
  • shell命令返回值判断的方法实现

    shell命令返回值判断的方法实现

    本文主要介绍了shell命令返回值判断的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • awk中实现ord函数功能

    awk中实现ord函数功能

    这篇文章主要介绍了awk中实现ord函数功能,ord函数用来将字符转化对应的ascii码,本文给出awk中的ord函数实现方法,需要的朋友可以参考下
    2014-08-08
  • Bash中test命令的使用

    Bash中test命令的使用

    本文主要介绍了Bash中test命令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • shell脚本学习与总结

    shell脚本学习与总结

    shell脚本学习总结,东西很多,供初学者参考
    2013-01-01
  • linux 中grep 匹配制表符 和 换行符的命令

    linux 中grep 匹配制表符 和 换行符的命令

    这篇文章主要介绍了linux 中grep 匹配制表符 和 换行符的命令,需要的朋友可以参考下
    2018-07-07
  • Linux帮助和用户管理命令

    Linux帮助和用户管理命令

    这篇文章主要介绍了Linux帮助和用户管理命令,需要的朋友可以参考下
    2017-10-10
  • Shell脚本判断Linux系统是32位还是64位的几种方法分享

    Shell脚本判断Linux系统是32位还是64位的几种方法分享

    这篇文章主要介绍了Shell脚本判断Linux系统是32位还是64位的几种方法分享,本文共给出了4种方法实现系统位数在判断,需要的朋友可以参考下
    2014-12-12
  • linux踢出远程登录用户命令(总结篇)

    linux踢出远程登录用户命令(总结篇)

    本文给大家总结了linux踢出远程登录用户命令,通过linux命令介绍了 tty 踢出登录的操作方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-01-01

最新评论