shell 管道命令与过滤器

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 [email protected]_ip:/backup/mysql/

  • mysqldump 命令用于将wike数据库备份到文件 /tmp/wikidb.backup。
  • gzip 命令用于压缩较大的数据库文件以节省磁盘空间;其中-9表示最慢的压缩速度最好的压缩效果。
  • scp 命令用于将数据库备份文件复制到 IP 地址为 remote_ip 的备份服务器的 /backup/mysql/ 目录下。其中username是登录远程服务器的用户名,命令执行后需要输入密码。

使用管道命令

mysqldump -u root -p ‘123456‘ wiki | gzip -9 | ssh [email protected]_ip "cat > /backup/wikidb.gz"

  • 命令的语法紧凑并且使用简单。
  • 通过使用管道,将三个命令串联到一起就完成了远程 mysql 备份的复杂任务。
  • 从管道输出的标准错误会混合到一起。
  • ssh [email protected]_ip "cat > /backup/wikidb.gz"是将上个命令中生成的文件通过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

  • ddd
  • bbb
  • CCC
  • ccc

tr a-z A-Z <os.txt | sort

  • BBB
  • CCC
  • CCC
  • DDD

2)管道与输出重定向

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

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

功能 命令 输出
使用 tr 命令将 os.txt 文件中的内容转化为大写,并使用 sort 命令将内容排序,使用 uniq 命令去除重复的行,最后将输出重定向到文件 ox.txt.new。
cat os.txt

  • ddd
  • bbb
  • CCC
  • ccc

tr a-z A-Z <os.txt | sort|uniq>os.txt.new

cat os.txt.new

  • BBB
  • CCC
  • DDD

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

  • _apt
  • asample
  • backup
  • bin
  • daemon

-F: 以:作为分隔符,默认分隔符是空格

‘{print $1}‘打印第一列信息

  列出当前账号最常使用的 5个命令
history | awk ‘{print $2}‘ | sort | uniq -c | sort -rn | head -5

  • 17 cat
  • 14 vim
  • 11 sudo
  • 7 ll
  • 7 cd

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 [指定字条串] [文件] 在文件中搜索字符串匹配的行并输出
-i 不区分大小写 -v 排除指定字符串

  查看系统中 HTTP 服务的进程信息
ps aux | grep httpd

   
  查找我们的程序列表中所有命令名中包含关键字 zip 的命令
ls /bin /usr/bin | sort | uniq | grep zip

  • bunzip2
  • bzip2
  • bzip2recover
  • funzip
  • gpg-zip
  • gunzip
 
  查找 /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

  • 2to3
  • 2to3-2.7
  • 2to3-3.5
  • X11
  • [
  • aclocal
  • aclocal-1.15
  • acyclic
  • add-patch
  • addpart
默认的输出行数为 10 行
  显示 ls 命令的前 5 行内容。
ls /usr/bin | head -n 5

  • 2to3
  • 2to3-2.7
  • 2to3-3.5
  • X11
  • [
 
uniq命令 去掉输出中重复的行
sort testfile | uniq

   
  显示输出中各重复的行出现的次数,并按次数多少倒序显示
sort testfile | uniq -c | sort -nr

   
wc命令 统计当前登录到系统的用户数
who | wc -l

2 wc 命令用于统计包含在文本流中的字符数、单同数和行数
  统计当前的 Linux 系统中的进程数
ps -ef | wc -l

70  

原文地址:https://www.cnblogs.com/ting152/p/12554524.html

时间: 2024-08-29 00:02:17

shell 管道命令与过滤器的相关文章

24 shell 管道命令与过滤器

1.管道命令的用法 2.使用管道命令的好处: 3.重定向和管道的区别 4.Linux管道实例 5.管道与重定向 1)管道与输入重定向 2)管道与输出重定向 6.过滤器 7.过滤器举栗 1.管道命令的用法 将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe).管道使用竖线|连接多个命令,这被称为管道符. Linux 管道的具体语法格式如下: command1 | command2command1 | comma

linux shell 管道命令(pipe)使用及与shell重定向区别

linux shell 管道命令(pipe)使用及与shell重定向区别 看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 st

[Shell]grep命令

我是好文章的搬运工,原文来自ChinaUnix,博主scq2099yt,地址:http://blog.chinaunix.net/uid-22312037-id-4217835.html 一.基本用法        grep是linux中很常用的一个命令,主要功能就是进行字符串数据的对比,能使用正则表达式搜索文本,并将符合用户需求的字符串打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户.grep在数据中查找出一

shell管道和重定向

看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 standard input. 一.管道命令使用说明: command1正确输出,作为c

adb shell dumpsys 命令

Android开发中,常常可以用adb shell dumpsys这条命令来dump出系统运行时的状态信息,例如可以这样来察看某个应用的内存使用信息 adb shell dumpsys meminfo com.google.android.apps.maps 察看TaskStack adb shell dumpsys activity activities 察看Alarm列表 adb shell dumpsys alarm 在CMD下面输入以下命令: adb shell dumpsys acti

shell管道与重定向

输出重定向 ? 1 $ ls -l > lsoutput 这条命令将ls命令执行后的结果输入出到lsoutput文件中. 在linux shell中使用符号 > ,< 来完成输入输出的重定向,同时对应的有三种标准的文件描述符,0(标准输入),1(标准输出),2(标准错误),可以 单独的重写向其中的任何一种.你还可以重定向其他的文件描述符,但对标准文件描述符以外进行重定向的情况很少见. 默认情况下>符号在 文件已经存在时它会覆盖,需要使用set -o noclobber(或set -

Linux shell管道与重定向及实例分析

一.管道 管道命令操作符是:"|",它仅能处理由前面一个命令的正确输出信息,也就是standard output的信息,对于stdandard error信息没有直接处理能力:然后,传递给下一个命令,作为标准输入standard input. linux管道执行过程: 管道命令使用说明: command1正确输出,作为command2的输入,然后command2的输出作为command3的输入,command3的输出打印到屏幕上: 通过管道:command1.command2的正确输出

管道命令的使用

bash命令执行的时候有输出数据,如果这群数据比寻经过几道手续之后才能得到我们所需要的格式,就涉及到管道命令(pipe),管道命令使用"|"这个界定符号,另外管道命令和连续执行命令是不一样的. 管道命令"|"仅能够处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error并没有直接处理的能力.在每个管道后面接的第一个数据必定是命令,而且这个命令必须能够接收standard input的数据才行,这样的命令才可以是

Shell与其命令语法分析

Shell与其命令语法分析 一.什么是shell? Shell俗称为"壳",是一种命令解释器,类似于DOS系统下的command.com程序. 它负责将用户输入的命令提交给内核,由操作系统的内核来决定该命令是否可以执行或者说有无执行的权限. Shell是由C语言编写的,它不仅是一种命令解析程序,shell还是功能强大的解释型程序设计语言,它可以定义各种选项和变量,几乎支持高级语言的所有程序结构,例如变量.函数.表达式和循环等.用shell可以编写shell脚本程序,类似于DOS下的批处