如果数据必须要经过几道手续之后才能得到我们想要的格式,这就是需要管道命令的问题了。管道命令使用“|”这个界定符号。

1)管道命令“|”仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于 stdandard error并没有直接处理的能力。

2)管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行。

示例1:查看etc/下面的文件
可以利用ls/etc来查阅,不过,因为/etc/下面的文件太多,导致一口气就将屏幕塞满了,不知道前面输出的内容是什么,此时我们可以通过less命令的协助.

输入命令:ls -al /etc | less
Linux学习—复习管道命令pipe

1 选取命令:cut grep

一般,选取信息通常是针对“行”来分析的,并不是整篇信息分析的。

1.1 cut

cut -d ‘分隔字符’ -f fields
cut c 字符范围
-d:后面接分隔字符,与-f一起使用;
-f:依据-d的分隔字符一段信息切割称为数段,用-f去除第几段的意思;
-c:以字符的单位取出固定字符区间

1)找出PATH变量,第5个路径
Linux学习—复习管道命令pipe
2)找出PATH变量,第3和第5个路径
Linux学习—复习管道命令pipe
3)将export输出的信息取得第100个字符以后的所有字符
Linux学习—复习管道命令pipe
4)last在显示的登录信息中留下第一列的信息

输入last所有信息显示
Linux学习—复习管道命令pipe
输入命令后
Linux学习—复习管道命令pipe

1.2 grep

grep是分析一行信息,若当中有我们所需要的信息,就将该行拿出来。

grep [acinv] [–color=auto] ‘查找字符串’ filename
参数:
-a:将binary文件以text文件的方式查找数据;
-c:计算找到’查找字符串’的次数;
-i:忽略大小写的不同,所以大小写视为相同;
-n:顺便输出行号;
-v:反向选择,即显示出没有’查找字符串’内容的那一行;
–color=auto:可以将找到的关键字部分加上颜色显示;

1)将last当中出现root的行取出来
Linux学习—复习管道命令pipe
2)只要没有root的就取出
Linux学习—复习管道命令pipe
3)在last输出信息中,取出不是root信息并取出第一列
Linux学习—复习管道命令pipe
4)取出/root/testfile 含usr的那几行
Linux学习—复习管道命令pipe
Linux学习—复习管道命令pipe

2 排序命令:sort,wc,uniq

2.1 sort

可以根据不同的数据类型进行排序。

sort [-fbMnrtuk] [file or stdin]
-f:忽略大小写的差异,例如A与a视为编码相同;
-b:忽略最前面的空格符部分;
-M:以月份的名字来排序,例如JAN、DEC等的排序方法;
-n:使用纯数字进行排序(默认为文字类型排序);
-r:反向排序;
-u:就是uiniq,相同的数据中,仅出现一行代表;
-t:分隔符,默认是用【Tab】来分隔;
-k:以那个区间(filed)来进行排序的意思;

1)/etc/passwd个人账户按照默认文字顺序排序
Linux学习—复习管道命令pipe
2)/etc/passwd以:来分隔的,以第三列来排序
Linux学习—复习管道命令pipe

2.2 uniq

如果排序完成后,想要将重复的数据仅列出一个显示。

uniq [-ic]
-i:忽略大小写字符的不同;
-c:进行计数

1)使用last将账号列出,仅取出账号列,进行排序后仅取出1位
Linux学习—复习管道命令pipe
2)想要知道每个人的登录次数
Linux学习—复习管道命令pipe

2.3 wc

wc可以用来计算输出信息的数据。

wc [-lwm]
-l:仅列出行;
-w:仅列出多少字(英文单字);
-m:多少字符;

1)列出/root/testfile 依次展示 行、字数、字符数
Linux学习—复习管道命令pipe
2)取出last这个月份登录系统的总人次,last最后两行不是账号内容

由于last会输出空白行和wtmp字样在最下面两行,我们需要使用grep取出非空白行以及去除wtmp那一行,再计算行数。
Linux学习—复习管道命令pipe

3 双向重定向:tee

想要见这个数据流处理过程中某段信息存下来,应该使用tee。tee同时将数据流送与文件与屏幕,而输出到屏幕的,其实就是stdout,可以让下个命令继续处理。

tee [-a] file
-a:以累加的方式,将数据加入file当中

1)将last的输出存到一份搭配last.list文件
Linux学习—复习管道命令pipe
last.file文件内容
Linux学习—复习管道命令pipe

2)将ls 的数据累加存到~/homefile,同时屏幕也有输出信息

Linux学习—复习管道命令pipe

Linux学习—复习管道命令pipe

4 字符转换命令:tr ,col,join,paste,expand

4.1 tr

tr用来删除一段信息当中的文字,或者是进行文字信息的替换。

tr [-ds] SET1…
-d:删除信息当中的SET1这个字符串
-s:替换掉重复的字符

1)将last输出信息中所有的小写字符变成大写字符。
Linux学习—复习管道命令pipe
2)将/etc/passwd输出的信息中的冒号(:)删除。
Linux学习—复习管道命令pipe

4.2 col

col经常被用于将man page转存位纯文本文件以方便查阅的功能。

col [-xb]
-x:将tab键转换成对等的空格键;
-b:在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符

将col的man page 转存成为/root/col.man 的纯文本文件
Linux学习—复习管道命令pipe
输入:vi /root/col.man
Linux学习—复习管道命令pipe

4.3 join

主要用于将两个文件中有相同数据的那一行加在一起。
join [-ti12] file1 file2
-t:join默认以空格符分隔数据,并且对比“第一个字段”的数据;

-i:忽略大小的差异;
-1:这个数字是1,代表第一个文件用哪个字段分析;
-2:代表第二个文件要用哪个字段来分析的意思。

1)用root身份,将/etc/passwd与/etc/shadow相关数据整合成一列
Linux学习—复习管道命令pipe
将两个文件整合到一行
Linux学习—复习管道命令pipe

4.4 paste

paste是直接将两行贴到一起,join是对比两个文件的数据相关性

paste [-d] file1 file2
-d:后面接分隔字符,默认是以【tab】来分隔;
-:如果file部分写成-,表示来自standard input 的数据的意思;

将/etc/passwd与/etc/shadow同一行粘贴到一起
Linux学习—复习管道命令pipe

4.5 expand

将【tab】键转成空格键。

expand [-t] file
-t:后面可以接数字,一般来说,一个[tab]键可以用8个空格键替换,我们也可以自定义一个[tab]键代表多少个字符。

5 切割命令:split

如果文件太大,导致一些携带式设备无法复制的问题,找splir,可以帮一个大文件依据文件大小或行数来切割成小文件,快速有效!

split [-bl] file PREFIX
参数:
-b:后面可接欲切割成的文件大小,可以加单位,例如b,k,m等;
-l:以行数来进行切割;
PREFIX:代表前导符,可作为切割文件的前导文字。

将/etc/testfile分隔成30k(此文件没有超过30k),并放入/tmp的tmpsplit开始的文件
Linux学习—复习管道命令pipe
Linux学习—复习管道命令pipe
若是大文件分隔成很多小文件,可以使用cat tmpsplit* >> tmpall 把多个小文件就重定向到一个文件tmpall。

2)将使用ls -al /输出的信息,每10行记录成一个文件
Linux学习—复习管道命令pipe

6 参数代换:xargs

就是在产生某个命令的参数的意思

xargs [-0epn] command
参数:
-0:如果输入的stdin含有特殊字符,例如’,,空格键等字符时,这个参数可以将它还原成一般字符,这个参数可以用于特殊字符;
-e:这个是EOF的意思。后面可以接一个字符串,,当xargs分析到这个字符时,就会停止继续工作;
-p:在执行每个命令的参数时,,都会询问用户;
-n:后面接次数,每次command命令执行时,要使用几个参数的意思

7 关于减号-的用途

在管道命令中,经常会使用到前一个明朗了的stdout作为这次的stdin,某些命令需要用到文件名来进行处理,该stdin与stdout可以用减号来代替。

将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout;经过管道后,将tar -cvf -/home传送给后面的tar -xvf -。后面这个-则是取用前一个命令的stdout,因此我们不需要使用文件
Linux学习—复习管道命令pipe
学习来源:鸟哥的Linux私房菜

相关文章:

  • 2021-05-27
  • 2022-12-23
  • 2021-07-20
  • 2022-03-11
  • 2021-08-02
  • 2021-04-07
  • 2021-11-01
  • 2021-04-27
猜你喜欢
  • 2021-12-16
  • 2021-09-12
  • 2022-12-23
  • 2021-08-19
  • 2022-01-08
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案