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 [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/mianbaoshu/p/12069794.html

时间: 2024-11-07 08:23:40

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

shell 管道命令与过滤器

1.管道命令的用法 将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe).管道使用竖线|连接多个命令,这被称为管道符. Linux 管道的具体语法格式如下: command1 | command2command1 | command2 [ | commandN... ] 当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入.只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这

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

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

shell管道和重定向

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

管道命令的使用

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

dirname和shell常用命令

$ cd `dirname $0` 和PWD%}  显示当前目录名称${#var}             替换为变量字符个数特殊变量$ 当前SHELL的PID? 前一个命令的退出状态! 后台执行的上一个工作的PID 读取用户输入read                        从终端读取输入存入内置变量REPLYread var                  从终端读取输入存入变量var    read first .. last       从终端读取多个变量依次存入,若输入较多,

shell常见命令02

grep 该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,比如可以加在ps, tail, cat后面 grep Nottingham uk-500.txt:在uk-500这个文档行中查找Nottingham所在的记录并显示出来 more uk-500.txt | grep Nottingham:用管道连接more和grep两个命令,结果与上个命令相同 more uk-500.txt | grep “Not

[Shell]grep命令

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

ANT编译打包&WIFI调试& adb shell常用命令

ANT编译打包 1:用ADT工具自带的打包:    1:切换到项目目录: 运行,android update project -p . android update project -p ./ --library ../com.example.plugin1.ifs 2:刷新:多了两个目录, 3:local.properties配置: sdk.dir=E:\\samy\\adt-huixin_x86-20140321\\sdk  key.store=./keystore/**** key.sto

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