如果我们需要获取数据,而原始数据需要经过一系列的过滤、分析、处理后才是我们需要的,那么bash脚本里,需要使用管道"|"来处理。
管道只处理前一个命令输出到stdout的信息。管道处理是以行为单位(段)来处理前一个命令的输出,以回车换行为标致。
(一)部分截取cut
截取命令是针对一行一行来进行的。
cut 指定分隔符进行分割,然后指定截取哪些“域”(列),在处理多空格的时候有些麻烦。
-d :指定分隔字符。
-f :-d分隔后,截取哪些列,从1开始。
-c :以字符 为单位取出固定字符区间,-c 12-20表示取12个字符到20个字符之间的段(二)整行过滤截取grep
grep命令,分析一行中,如果有我们想要的信息,就将改行整个取出来
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行(三)排序sort
默认以第1列来排序,按字符顺序排序,常见参数如下:
-f :忽略大小写
-b :忽略最前面的空格;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :按数字进行排序(默认以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :指定分隔符,默认 tab ;
-k :以那个区间 (field) 来进行排序的意思,(四)相同元素统计uniq,
通常在sort后,重复的信息行删掉,只显示一项,参数如下:
-i :忽略大小写字符的不同;
-c :进行计数(五)统计wc,
统计文件里信息有多少行、多少字符、多少字,参数如下:
-l 行
-w 字
-m 字符
(六)tee
处理的数据流双向导出,处理数据流既想导出到文件,又想在管道里继续处理,使用 tee
tee [-a] file
ifconfig |grep mtu |cut -d ':' -f 1|tee ifname.txt |awk '{print $1}'
(七)tr
对信息流进行删除字符或替换字符 tr
参数:
-d :删除信息流中的某个字符串
-s :取代掉重复的字符(八)col
tab键和空格键的相互替换 col
-x 将对等数量的tab转成空格
-h 将对等数量的空格转成tab
(九)join命令
合并文件,如果2个文件有相同类型&值的列,通过相同列将这2个文件联合起来,以便以后处理
-t :join 默认以空格符分隔数据,并且比对第一列字段为合并相同列,如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个。
-i :忽略大小写
-1 x:第一个文件以第x列作为合并相同列
-2 y:第一个文件以第x列作为合并相同列如:
join -t ':' -1 1 -2 1 /etc/passwd /etc/shadow
(十)paste
将两个文件,以行为单位,直接粘贴在一起
-d :指定分隔字符,默认 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示其中一个文件来自standard output。如下 标识将a.config ,b.config,c.config 合在一起
cat a.config |paste b.config c.config
(十一)expand
将 [tab] 按键转成空格键
-t :后面可以接数字,标识替换为多少个空格
cat /etc/man.config |expand -t 4 |cat –A
(十二)split 分割文档
-b 按大小来分割,单位是b k m
-l 按行数来分割
(十三)xargs 参数代换
xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的资料分隔成为 arguments。xargs 后面没有接任何的指令时,默认是以 echo 来进行输出
cut -d':' -f1 < /etc/passwd |head -n 3| xargs finger
(十四)减号 - 的用途
某些指令需要用到文件名称 (例如 tar) 来进行处理时,该 stdin 与 stdout 可以利用减号 "-" 来替代。
管道前一个 减号 表示:将passwd压缩结果发送到标准输出,管道后的 减号,表示从标准输入上获取压缩流,进行解压。
tar -cvf - /etc/passwd | tar -xvf -
转载于:https://www.cnblogs.com/blue-sea-sky/p/5478828.html