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

相关文章

  • Linux之时钟中断详解

    Linux之时钟中断详解

    这篇文章主要介绍了Linux之时钟中断详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Shell脚本监控目录内文件改动

    Shell脚本监控目录内文件改动

    这篇文章主要介绍了Shell脚本监控目录内文件改动,需要的朋友可以参考下
    2017-05-05
  • linux 中grep 匹配制表符 和 换行符的命令

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

    这篇文章主要介绍了linux 中grep 匹配制表符 和 换行符的命令,需要的朋友可以参考下
    2018-07-07
  • 如何使用date获取时间戳

    如何使用date获取时间戳

    这篇文章主要介绍了如何使用date获取时间戳,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Shell脚本自动部署项目的方法步骤

    Shell脚本自动部署项目的方法步骤

    本文主要介绍了Shell脚本自动部署项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 利用kernel提供的接口打印进程号(pid)

    利用kernel提供的接口打印进程号(pid)

    我们知道linux是模块化的内核。实现模块、利用kernel提供的接口,首先了解写模块的基本框架。下面的c文件就是最基本的框架,当然还有怎样添加一些符号变量,利用的module_param,没用上
    2013-11-11
  • Linux rm命令详解 Linux删除文件目录的操作方法

    Linux rm命令详解 Linux删除文件目录的操作方法

    这篇文章主要介绍了Linux rm命令详解,Linux删除文件目录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Linux 用户名称高亮和最近路径显示问题

    Linux 用户名称高亮和最近路径显示问题

    这篇文章主要介绍了Linux 用户名称高亮和最近路径显示,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • shell学习教程获取命令行参数示例

    shell学习教程获取命令行参数示例

    这篇文章主要介绍了shell学习中的基础知识的获取命令行参数示例,需要的朋友可以参考下
    2014-03-03
  • shell脚本监控mysql主从状态

    shell脚本监控mysql主从状态

    这篇文章主要介绍了shell脚本监控mysql主从状态,如果异常则邮件警告,需要的朋友可以参考下
    2014-05-05

最新评论