博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell中神奇的管道命令(pipe)
阅读量:4102 次
发布时间:2019-05-25

本文共 2619 字,大约阅读时间需要 8 分钟。

管道,首次看到这个名词,我并不能将他和os还有shell联系到一起。很难想象这么机械化的一个词语居然能和编程联系起来,而且他还是shell编程中比较重要的一环。

bash命令执行的时候偶输出的数据会出现。那么如果这群数据必须要经过几道手续才能得到我们想要的格式,此时就要需要用到“|”这个界定符号了。管道命令与连续命令是不一样的。简单举个例子:

ls -al /etc | less

即可利用less的功能,我们就能前后翻动相关的信息了。

整体的管道命令可以用以下这个图表示:
在这里插入图片描述

在每个管道后面接的第一个数据一定是“命令”,而且这个命令必定要能接受STANDARD input的数据才可以,这样的命令才是“管道命令”。例如:less,more,head,tail等才是可以接受标准输入的管道命令,而像ls,cp,mv等就不行。

注意

  • 管道命令仅会处理standard input,对于standard error output会予以忽略。
  • 管道命令必须要能接收来自前一个命令的数据成为standard input 继续处理才行。

1.选取命令:cut,grep

cut 主要的用途在于将同一行里面的数据进行分解,最常使用在分析一些数据或文字数据的时候。这是因为有时候我们会以某些字符当作切割的参数,然后将数据加以切割,以取得我们所需要的数据。不过,cut在处理多空格的相连的数据时会比较吃力一些

cut -d'分隔字符' -ffilelds <==用于分隔字符cut-c 字符范围               <==用于排列整齐的信息
export  | cut -c 12-     <==输出第12字符以后的所有字符last

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

语法

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

2.排序命令:sort,wc,uniq

sort依据不同的数据类型来进行排序。

语法:

sort [-fbMnrtuk] [file or stadin]参数:-f;忽略大小写的差异-b:忽略最前面的空格符部分-M:以月份的名字来排序-n:使用“纯数字”进行排序-r:反向排序;-u:就是uniq,相同的数据中,仅出现一行代表-t:分隔符,默认是用【tab】键来分隔-k:以那个区间(field)来进行排序的意思cat /etc/passwd | sort

uniq

重复的数据仅列出一个

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

wc

想知道一个文件里面到底有多少字?多少行?多少字符?就可以使用这个命令。

wc [-lwm]-l:仅列出行-w:仅列出多少字-m:多少字符如果没有参数,三个数字代表的是行,字数,字符数

3.双向重定向:tee

把数据流的处理过程中将某段信息存下来,如图:

tee

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

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

tr

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

tr [-ds]set1...参数:-d:删除信息中的set1这个字符串-s:替换掉重复的字符不加参数是替换

这个命令可以写在正则表达式中。

col

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

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

join

主要是将两个文件当中的有相同数据的那一行加在一起。

join [-ti12] file1 file2参数:-t:join默认以空格符分隔数据,并且对比“第一个字段”的数据,如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个-i:忽略大小写-1:代表第一个文件要用哪个字段来分析的意思-2:代表第二个文件要用哪个字段来分析的意思

注意

在使用join之前,你所需要处理的文件应该要事先经过排序(sort)处理

paste

相对与join必须要对比两个文件的数据相关性,paste就直接将两行贴在一起,且中间以【

tab】键隔开而已

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

expand

将tab转换成空格键

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

切割命令:spilt

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

参数代换:xargs

产生某个命令的参数的意思

xargs [-0epn] command参数:-0:如果输入的stdin含有特殊字符,例如`,\,空格键等字符时,这个参数可以将它还原成一般字符,这个参数可以用于特殊状态。-e:这个是EOF(end of file)的意思。后面可以接一个字符串,当xargs分析到这个字符串时,就会停止继续工作。-p:在执行每个命令的参数时,都会询问用户的意思。-n:后面接 次数,每次command命令执行时,要使用几个参数的意思。
  • 使用xargs的原因是,很多命令不支持管道命令,我们可以通过xargs来提供该命令引用standard input之用。

减号“-”的作用

tar -cvf - /home |tar -xvf -

这个例子的意思是将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout;经过管道后,将tar-cvf-/home传送给后面的tar-xvf-。后面的这个-则是取用前一个命令的stdout,因此我们就不需要使用文件了。

转载地址:http://xlksi.baihongyu.com/

你可能感兴趣的文章
PHP7新特性 What will be in PHP 7/PHPNG
查看>>
比较strtr, str_replace和preg_replace三个函数的效率
查看>>
ubuntu 下编译PHP5.5.7问题:configure: error: freetype.h not found.
查看>>
PHP编译configure时常见错误 debian centos
查看>>
configure: error: Please reinstall the BZip2 distribution
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
【增强学习在无人驾驶中的应用】
查看>>
OpenCV meanshift目标跟踪总结
查看>>
人工神经网络——神经元模型介绍
查看>>
Windows 窗口底层原理
查看>>
一种函数指针的运用
查看>>
今天,Python信息量很大!
查看>>
Flash 已死,Deno 当立?
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
为何程序员总喜欢写技术博客,看完恍然大悟...
查看>>