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 33 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 33 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

– 求知若饥,虚心若愚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/429584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于 CTF 中 php 考点与绕过那些事的总结

关于 CTF 中常见 php 绕过的总结可以参考我之前的博客&#xff1a; CTF之PHP特性与绕过 PHP特性之CTF中常见的PHP绕过-CSDN博客 其中主要介绍了 md5()、sha1()、strcmp、switch、intval、$_SERVER 函数、三元运算符、strpos() 、数组、非法参数名传参等相关的绕过。 在此基础上…

vue点击按钮同时下载多个文件

点击下载按钮根据需要的id调接口拿到返回需要下载的文件 再看返回的数据结构 数组中一个对象&#xff0c;就是一个文件&#xff0c;多个对象就是多个文件 下载函数 // 下载tableDownload(row) {getuploadInventoryDownload({ sysBatch: row.sysBatch, fileName: row.fileName…

Linux 进程间通信

目录 管道 匿名管道&#xff08;pipe&#xff09; 有名管道&#xff08;fifo&#xff09; 小结 共享内存 消息队列 信号量 System V IPC的结构设计 Posix与System V的关系 管道 匿名管道&#xff08;pipe&#xff09; 我们知道&#xff0c;在Linux中通过fork创建的子…

YOLOv5优化改进:下采样创新篇 | 新颖的下采样ADown | YOLOv9

💡💡💡本文独家改进:新颖的下采样ADown来自于YOLOv9,助力YOLOv5,将ADown添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/categ…

MongoDB 快速入门

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于MongoDB系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础…

SpringMVC--03--前端传数组给后台

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 案例1乘客个人信息方法1&#xff1a;表单提交&#xff0c;以字段数组接收方法2&#xff1a;表单提交&#xff0c;以BeanListModel接收方法3&#xff1a;将Json对象序…

电脑黑屏如何重装系统 电脑黑屏安装系统操作方法

据了解,75%以上的用户在使用电脑时都有碰到黑屏的现象,而电脑黑屏不但会影响自己的工作,而且还会影响自己的心情,因此,不可马虎,那么,应该怎么办呢?下面我们就来详细介绍一下 据了解,75%以上的用户在使用电脑时都有碰到黑屏的现象,而电脑黑屏不但会影响自己的工作,而…

vue3三级嵌套复选框(element-plus)

一、功能描述 当选择第一级的复选框时下面所有内容全选和取消全选&#xff0c;当选择第二的复选框时第三级的所有内容全选和取消全选。只要有一个第三级的内容没有选&#xff0c;二级和一级则不能勾上。第三级内容全选上了&#xff0c;第二级复选框就钩上。第二级也是同样的道理…

使用GitHub API 查询开源项目信息

一、GitHub API介绍 GitHub API 是一组 RESTful API 接口&#xff0c;用于与 GitHub 平台进行交互。通过使用 GitHub API&#xff0c;开发人员可以访问和操作 GitHub 平台上的各种资源&#xff0c;如仓库、提交记录、问题等。 GitHub API 提供了多种功能和端点&#xff0c;以…

HTTP有什么缺陷,HTTPS是怎么解决的

缺陷 HTTP是明文的&#xff0c;谁都能看得懂&#xff0c;HTTPS是加了TLS/SSL加密的&#xff0c;这样就不容易被拦截和攻击了。 SSL是TLS的前身&#xff0c;他俩都是加密安全协议。前者大部分浏览器都不支持了&#xff0c;后者现在用的多。 对称加密 通信双方握有加密解密算法…

零基础如何快速入门伦敦金交易

伦敦金交易是金融市场中备受关注的一种投资方式。对于想要学习如何炒伦敦金并快速开始交易的人来说&#xff0c;本文将为您提供一份全面而详细的指南。无论您是初学者还是有经验的交易者&#xff0c;本文都将帮助您了解伦敦金交易的基本知识&#xff0c;并提供一些实用的技巧和…

如何在 Windows 11/10 中合并分区而不丢失数据

在本文中&#xff0c;我们将了解如何在 Window 11/10 中合并分区而不丢失个人数据。每个人都会觉得需要扩大驱动器/分区的容量&#xff0c;但是在计算机中重新安装Windows对他们来说很麻烦。在 Windows PC 中合并分区的方法有很多种。我们将在下面逐步讨论一些工作方法&#xf…

IDEA中Maven无法下载jar包问题解决

在项目中经常会遇到jar包无法下载的问题&#xff0c;可以根据以下几种方法进行排查。 1. 排查网络连接 网络连接失败&#xff0c;会导致远程访问Maven仓库失败&#xff0c;所以应确保网络连接正常。 2. 排查Maven的配置 Maven配置文件&#xff08;settings.xml&#xff09;…

计算机网络-物理层-传输媒体

传输媒体的分类 导向型-同轴电缆 导向型-双绞线 导向型-光纤 非导向型

某品零食交易平台设计与实现|基于springboot+ Mysql+Java的某品交易平台设计与实现(源码+数据库+文档+PPT)

目录 基于springboot MysqlJava的某品交易平台设计与实现 摘 要 系统详细设计 数据库设计 论文参考 源码获取 文末获取源码联系 基于springboot MysqlJava的某品交易平台设计与实现 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的…

嵌入式驱动学习第二周——Linux内核打印

前言 这篇博客来聊一聊Linux内核打印。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论一起学习。现在关注就是老粉啦&#xff01; 目录 前言1. dmesg指令…

RabbitMQ(三):AMQP协议

目录 1 AMQP协议1.1 AMQP协议介绍1、AMQP是什么2、消息代理中间件的职责 1.2 AMQP 0-9-1模型1、AMQP的工作过程2、交换器和交换器类型3、队列队列属性队列名称队列持久化 1.3 几个概念1、绑定2、消费者3、消息确认4、预取消息5、消息属性和有效载荷&#xff08;消息主体&#x…

latex编译生成的pdf文件,图片出现浅色的线

目录 问题描述&#xff1a; 解决办法&#xff1a; 问题描述&#xff1a; 在overleaf中&#xff0c;导入图片&#xff0c;编译之后&#xff0c;不知道为什么会出现一条浅色的线&#xff0c;很影响视觉效果&#xff08;ps:在浏览器中看不到这条线&#xff0c;但是在pdf阅读器中…

window路径特殊字符解决

官方定义命名规范 https://learn.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file 重点 1.目录规范 特殊字符以空格 与点.开头结尾 2.文件规范 特殊字符以空格 与点.开头结尾NUL、COM等文件 解决方案 字符标点符号实际上在字符集定义中有一个很有趣的现象&…

两天学会微服务网关Gateway-Gateway HelloWorld快速入门

锋哥原创的微服务网关Gateway视频教程&#xff1a; Gateway微服务网关视频教程&#xff08;无废话版&#xff09;_哔哩哔哩_bilibiliGateway微服务网关视频教程&#xff08;无废话版&#xff09;共计17条视频&#xff0c;包括&#xff1a;1_Gateway简介、2_Gateway工作原理、3…