24 shell 管道命令与过滤器
- 1.管道命令的用法
- 2.使用管道命令的好处:
- 3.重定向和管道的区别
- 4.Linux管道实例
- 5.管道与重定向
- 1)管道与输入重定向
- 2)管道与输出重定向
- 6.过滤器
- 7.过滤器举栗
1.管道命令的用法
将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。管道使用竖线|
连接多个命令,这被称为管道符。
Linux 管道的具体语法格式如下:
command1 | command2
command1 | command2 [ | commandN... ]
当在两个命令之间设置管道时,管道符|
左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道。
这里需要注意,command1 必须有正确输出,而 command2 必须可以处理 command1 的输出结果;而且 command2 只能处理 command1 的正确输出结果,不能处理 command1 的错误信息。
2.使用管道命令的好处:
命令
|
作用
|
---|---|
3条命令来备份数据库 mysqldump -u root -p '123456' wiki > /tmp/wikidb.backup gzip -9 /tmp/wikidb.backup scp /tmp/wikidb.backup username@remote_ip:/backup/mysql/ |
|
使用管道命令 mysqldump -u root -p '123456' wiki | gzip -9 | ssh username@remote_ip "cat > /backup/wikidb.gz" |
|
3.重定向和管道的区别
乍看起来,管道也有重定向的作用,它也改变了数据输入输出的方向,那么,管道和重定向之间到底有什么不同呢?
简单地说,重定向操作符>将命令与文件连接起来,用文件来接收命令的输出;而管道符|将命令与命令连接起来,用第二个命令来接收第一个命令的输出。如下所示:
command > file
command1 | command1
4.Linux管道实例
|
|
输出
|
---|---|---|
将 ls 命令的输出发送到 grep 命令,查看文件 log.txt 是否存在于当前目录下 |
ls | grep log.txt |
log.txt |
重定向管道的输出到一个文件 |
ls -al | grep log.txt >output.txt cat output.txt |
-rw-rw-r--. 1 mozhiyan mozhiyan 0 4月 15 17:26 log.txt |
显示按用户名排序后的当前登录系统的用户的信息 |
who | sort |
mozhiyan :0 2019-04-16 12:55 (:0) mozhiyan pts/0 2019-04-16 13:16 (:0) who 命令的输出将作为 sort 命令的输入, 所以这两个命令通过管道连接后会显示按照用户名排序的已登录用户的信息。 |
5.管道与重定向
1)管道与输入重定向
输入重定向操作符<可以在管道中使用,以用来从文件中获取输入,其语法类似下面这样:
command1 < input.txt | command2
command1 < input.txt | command2 -option | command3
功能
|
命令
|
输出
|
---|---|---|
使用 tr 命令从 os.txt 文件中获取输入,然后通过管道将输出发送给 sort 或 uniq 等命令 |
cat os.txt
tr a-z A-Z <os.txt | sort |
|
2)管道与输出重定向
你也可以使用重定向操作符>或>>将管道中的最后一个命令的标准输出进行重定向,其语法如下所示:
command1 | command2 | ... | commandN > output.txt
command1 < input.txt | command2 | ... | commandN > output.txt
功能
|
命令
|
输出
|
---|---|---|
使用 tr 命令将 os.txt 文件中的内容转化为大写,并使用 sort 命令将内容排序, 使用 uniq 命令去除重复的行,最后将输出重定向到文件 ox.txt.new。 |
cat os.txt
tr a-z A-Z <os.txt | sort|uniq>os.txt.new cat os.txt.new |
|
6.过滤器
过滤器可以概括为两点:
- 如果一个 Linux 命令是从标准输入接收它的输入数据,并在标准输出上产生它的输出数据(结果),那么这个命令就被称为过滤器。
- 过滤器通常与 Linux 管道一起使用。
常用的被作为过滤器使用的命令如下所示:
命令
|
说明
|
---|---|
awk | 用于文本处理的解释性程序设计语言,通常被作为数据提取和报告的工具。 |
cut | 用于将每个输入文件(如果没有指定文件则为标准输入)的每行的指定部分输出到标准输出。 |
grep | 用于搜索一个或多个文件中匹配指定模式的行。 |
tar | 用于归档文件的应用程序。 |
head | 用于读取文件的开头部分(默认是 10 行)。如果没有指定文件,则从标准输入读取。 |
paste | 用于合并文件的行。 |
sed | 用于过滤和转换文本的流编辑器。 |
sort | 用于对文本文件的行进行排序。 |
split | 用于将文件分割成块。 |
strings | 用于打印文件中可打印的字符串。 |
tac | 与 cat 命令的功能相反,用于倒序地显示文件或连接文件。 |
tail | 用于显示文件的结尾部分。 |
tee | 用于从标准输入读取内容并写入到标准输出和文件。 |
tr | 用于转换或删除字符。 |
uniq | 用于报告或忽略重复的行。 |
wc | 用于打印文件中的总行数、单词数或字节数。 |
7.过滤器举栗
|
功能
|
命令
|
输出
|
知识点
|
---|---|---|---|---|
|
功能
|
命令
|
输出
|
知识点
|
awk与管道结合 | 查看系统中的所有的账号名称,并按名称的字母顺序排序 |
awk -F: '{print $1}' /etc/passwd | sort|head -5 |
|
-F: 以:作为分隔符,默认分隔符是空格 '{print $1}'打印第一列信息 |
列出当前账号最常使用的 5个命令 |
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -5 |
|
uniq -c 在每列旁边显示该行重复出现的次数。 sort -rn 按照数值的大小反向排序 |
|
显示当前系统的总内存大小,单位为 KB |
free | grep Mem | awk '{print $2}' |
2029860 |
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer | |
cut 与管道命令结合 | 查看系统中登录 Shell 是/bin/bash的用户名和对应的用户主目录的信息 |
grep "bin/bash" /etc/passwd|cut -d : -f1,6 |
root:/root roaddb:/home/roaddb asample:/home/asample |
/ctc/passwd 文件用来存放用户账号的信息,文件中的每一行会记录一个账号的信息,每个字段之间用冒号分隔,第一个字段即是账号的账户名,第六个字段就是账号的主目录的路径。 |
查看当前机器的CPU类型 |
cat /proc/cpuinfo |grep name|cut -d : -f 2|uniq |
Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz | ||
查看当前目录下的子目录数 |
ls -l|cut -c 1|grep d|wc -l |
4 | 命令cut -c 1 是截取每行的第一个字符 |
|
grep命令 | 查看系统日志文件中的错误信息 |
grep -i "error:" /var/log/messages | less |
grep -iv [指定字条串] [文件] 在文件中搜索字符串匹配的行并输出 |
|
查看系统中 HTTP 服务的进程信息 |
ps aux | grep httpd |
|||
查找我们的程序列表中所有命令名中包含关键字 zip 的命令 |
ls /bin /usr/bin | sort | uniq | grep zip |
|
||
查找 /etc 目录下所有包含 IP 地址的文件 |
find /etc -type f -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \; |
|||
tar命令 | 复制一个目录的整体结构 |
tar cf - /home/mozhiyan | ( cd /backup/; tar xf - ) |
||
跨网络地复制一个目录的整体结构 |
tar cf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xf - )" |
|||
跨网络地压缩复制一个目录的整体结构 |
tar czf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xzf - )" |
|||
检査 tar 归档文件的大小,单位为字节 |
cd /; tar cf - etc | wc -c |
|||
检查 tar 归档文件压缩为 tar.gz 归裆文件后所占的大小 |
tar czf - etc.tar | wc -c |
|||
检查 tar 归档文件压缩为 tar.bz2 归裆文件后所占的大小 |
tar cjf - etc.tar | wc -c |
|||
head 命令 | 显示 ls 命令的前 10 行输出 |
ls /usr/bin | head |
|
默认的输出行数为 10 行 |
显示 ls 命令的前 5 行内容。 |
ls /usr/bin | head -n 5 |
|
||
uniq命令 | 去掉输出中重复的行 |
sort testfile | uniq |
||
显示输出中各重复的行出现的次数,并按次数多少倒序显示 |
sort testfile | uniq -c | sort -nr |
|||
wc命令 | 统计当前登录到系统的用户数 |
who | wc -l |
2 | wc 命令用于统计包含在文本流中的字符数、单同数和行数 |
统计当前的 Linux 系统中的进程数 |
ps -ef | wc -l |
70 |
24 shell 管道命令与过滤器的更多相关文章
- linux shell 管道命令(pipe)使用及与shell重定向区别
管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandarderror 信息没有直接处理能力.然后,传递给下一个命令 ...
- 常见linux命令释义(第九天)—— Bash Shell 的操作环境Shell 中的管道命令一些管道命令
最近好懒好懒.连写文章都写不好了.于是只能写读一点书,记一点读书笔记了.太懒了,没办法.慢慢恢复自己的状态吧. 管道命令仅会处理strandard output 的内容,对于strandard err ...
- 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
主要内容 1.标准输入输出和错误 2.管道命令和 grep, tr,sort, wc, cut,split,tee,sleep 标准输入输出和错误 标准输入(stdin) 是指令数据的输入,代码为0, ...
- dirname和shell常用命令
$ cd `dirname $0` 和PWD%} 显示当前目录名称${#var} 替换为变量字符个数特殊变量$ 当前SHELL的PID? 前一个命令的退出状态! 后台执行的上 ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- grep 和 wc命令 --- !管道命令!
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...
- (转)Hbase shell 常用命令(1)
Hbase shell 常用命令(1) link:http://blog.csdn.net/scutshuxue/article/details/6988348 下面我们看看HBase Shell的一 ...
- Linux系统管道命令符
管道命令符“|”的作用是将前一个命令的标准输出作为后一个命令的标准输入,格式为“命令A | 命令B” 以下实例中,通过grep命令搜索关键字“/sbin/nologin”在/etc/passwd中查找 ...
- shell管道和重定向
看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令 ...
随机推荐
- 提高IO输出速度
用DMA内存到内存的模式,直接把Gpio_data的数据循环的搬到GPIOC的BSRR寄存器上来控制GPIOC上电平的翻转,这样使得GPIO的速度达到了最快,输出70ns的脉宽,这已经是达到了DMA总 ...
- 在ssm框架测试中解决javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException
在单元测试发现causeBy:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException 经发现是db.p ...
- 性能调优命令之jstack
jstack是java虚拟机自带的一种线程堆栈跟踪工具. /opt/java8/bin/jstack Usage: jstack [-l] <pid> (to connect to run ...
- openresty 学习笔记二:获取请求数据
openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...
- GO语言常用标准库03---time包
package main import ( "fmt" "time" ) func main021() { nowTime := time.Now() fmt. ...
- YOLOvi(i=1,2,3,4)系列
YOLOvi(i=1,2,3,4)系列 YOLOv4论文链接:https://arxiv.org/pdf/2004.10934.pdf YOLOv4源码链接:https://github.com/Al ...
- 用NVIDIA NsightcComputeRoofline分析加速高性能HPC的应用
用NVIDIA NsightcComputeRoofline分析加速高性能HPC的应用 编写高性能的软件不是一件简单的任务.当有了可以编译和运行的代码之后,当您尝试并理解它在可用硬件上的执行情况时,将 ...
- 简化可视SLAM应用程序的开发
简化可视SLAM应用程序的开发 Easing the development of visual SLAM applications 同步定位和映射(SLAM)描述了一个设备(如机器人)使用传感器数据 ...
- Linux基础_vim命令
简介:Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. vi/vim 共分为三种模式,分别是命令模式(Command mode)也叫 ...
- 错误档案1:Eclipse自动生成swing窗体代码报错
目录 前言 错误信息 解决方法 结论 前言 大家好呀,我是 白墨,一个热爱学习与划水的矛盾体. 昨天为了图方便,使用MyEclipse中的swing功能画界面,画完以后发现无法运行,查看源代码发现全报 ...