管线命令

  bash 命令执行癿时候有输出癿数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定? 这就牵涉到管线命令的问题了 (pipe) ,管线命令使用的是“|”这个界定符号! 另外,管线命令与“连续下达命令”是不一样的呦! 这点底下我们会再说明。底下我们先举一个例子来说明一下简单的管线命令。
假设我们想要知道 /etc/ 底下有多少档案,那么可以利用ls /etc来查阅,不过, 因为 /etc 底下的档案太多,导致一口气就将屏幕塞满了~不知道前面输出的内容是啥?此时,我们可以透过 less指令的协助,利用:
这里写图片描述

  如此一来,使用ls指令输出后的内容,就能被less读取,并且利用less的功能,我们就能前后翻动相关的信息了!
  其实管线这个命令只能处理经由前面一个指令传来的正确信息,也就是standard output的信息,对于standard error并没有直接处理的能力。
  每个管线后面接的第一个数据必定是【指令】!而且这个指令必须要能够接受standard input的数据才行,这样的指令可以是为【管线命令】,例如,less,more,head,tail等都是可以接受standard input的管线命令的。至于例如ls,cp,mv等就不是管线命令了!因为ls,cp,mv并不会接受来自stdin的数据。也就是说,管线命令主要有两个比较需要注意的地方:
  - 管线命令仅会处理standard output,对于standard error output会予以忽略
  - 管线命令必须能够接受来自前一个指令的数据成为standard input继续处理才行

  下面介绍几类管线命令。

撷取命令cut,grep

  撷取命令就是将一段数据经过分析后,取出我们所想要的。或者是经由分析关键词,取出我们想要的那一行。不过要注意的是,撷取讯息通常是针对一行一行来分析的,并不是整片讯息的分析。

cut

  cut指令可以将一段讯息的某一段给切出来。
这里写图片描述
这里写图片描述
这里写图片描述

  cut主要的用途在于将同一行里面的数据进行分解!最常使用在分析一些数据或文字数据的时候!

grep

刚刚的cut是将一行讯息当中取出某部分我们想要的,而grep则是分析一行讯息中,若当中有我们所需要的信息,就将该行拿出来。
这里写图片描述
这里写图片描述

排序命令sort,wc,uniq

sort

  sort是很有用的指令,它可以帮我们进行排序,而且可以依据不同的数据形态来排序,例如数字与文字的排序就不一样。此外,排序的字符与语系的编码的编码有关。因此,如果你需要排序时,建议使用LANG=C来让语系统一,数据排序会比较好一些。
  这里写图片描述
  这里写图片描述

uniq

  如果我排序完成了,想要将重复的资料仅列出一个显示,可以怎么做呢?
  这里写图片描述
  这里写图片描述
  这个指令用来将重复的行初除掉叧显示一个,举个例子来说,你要知道这个月份登入你主机的用户有谁,而不在乎他的登入次数,那么就使用上面的范例,(1)先将所有的数据列出;(2)再将人名独立出来;(3)经过排序;(4)叧显示一个!由亍这个挃令是在将重复癿东西减少,所以当然需要【配合排序过的档案】来处理啰!
  如果我想要知道/etc/man.config这个档案里面有多少字?多少行?多少字符的话,可以怎么做呢?其实可以利用wc这个指令来达成!它可以帮我们计算输出的讯息的整体数据。
这里写图片描述

双向重导向:tee

  tee 会同时将数据流分送到档案与屏幕去 (screen);而输出到屏幕的,其实就是 stdout ,可以让下个指令继续处理喔!
  这里写图片描述
  tee 可以让standard output 转存一份到档案内并将同样的数据继续送到屏幕去处理! 这样除了可以让我们同时分析一份数据并记录下来之外,还可以作为处理一份数据的中间暂存盘记录之用!

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

tr

  tr可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!
这里写图片描述
这里写图片描述
  其实这个指令也可以写在【正觃表示法】里头!因为他也是由正则表示法的方式来取代数据的!以上面的例子来说,使用 [] 可以设定一串字呢!也常常用来取代档案中的怪异符号! 例如上面第三个例子当中,可以去除 DOS 档案留下来的 ^M 这个断行的符号!这东西相当的有用!相信处理 Linux &Windows 系统中癿人们最麻烦的一件事就是这个事情啦!亦即是 DOS 底下会自动的在每行行尾加入^M 这个断行符号!这个时候我们可以使用这个 tr来将 ^M 去除! ^M 可以使用 \r 来代替之!

col

这里写图片描述
  虽然 col 有他特殊癿用途,不过,很多时候,他可以用来简单的处理将 [tab] 按键取代成为空格键! 例如上面的例子当中,如果使用 cat -A 则 [tab] 会以 ^I来表示。 但经过 col -x 的处理,则会将 [tab] 取代成为对等的空格键!此外, col 经常被利用于将 man page 转存为纯文本文件以方便查阅的功能!如上述的范例二!

join

  join 看字面上的意义 (加入/参加) 就可以知道,他是在处理两个档案之间的数据, 而且,主要是在处理【两个档案当中,有 “相同数据” 的那一行,才将他加在一起】的意思。我们利用底下的简单例子来说明:
这里写图片描述
这里写图片描述
  这个 join 在处理两个相关的数据文件时,就真的是很有帮助的啦! 例如上面的案例当中,我的/etc/passwd, /etc/shadow, /etc/group 都是有相关性的, 其中 /etc/passwd, /etc/shadow 以账号为相关性,至于 /etc/passwd, /etc/group 则以所谓的 GID (账号的数字定义) 来作为他的相关性。根据这个相关性, 我们可以将有关系的资料放置在一起!这在处理数据可是相当有帮助的! 但是上面的例子有点难,希望您可以静下心好好癿看一看原因喔!
  此外,需要特别注意的是,在使用 join之前,你所需要处理的档案应该要事先经过排序 (sort) 处理!否则有些比对的项目会被略过呢!特别注意了!

paste

  这个paste就要比join简单多了。相对于join 必须要比对两个档案的数据相关性, paste 就直接【将两行贴在一起,且中间以 [tab] 键隔开】而已!简单的使用方法:
  这里写图片描述

expand

这玩意儿就是在将 [tab] 按键转成空格键啦~可以这样玩:
这里写图片描述
这里写图片描述
  expand 也是挺好玩癿~他会自动将 [tab] 转成空格键~所以,以上面的例子来说, 使用 cat -A 就会查不到 ^I 的字符啰~此外,因为 [tab] 最大的功能就是格式排列整齐! 我们转成空格键后,这个空格键也会依据我们自己的定义来增加大小~ 所以,并不是一个 ^I 就会换成 8 个空白喔!这个地方要特别注意的哩! 此外,您也可以参考一下 unexpand 这个将空白转成 [tab] 的指令功能。

分割命令:split

  如果你有档案太大,导致一些携带式装置无法复制的问题,找 split 就对了! 他可以帮你将一个大档案,依据档案大小或行数来分割,就可以将大档案分割成为小档案了!快速又有效啊!真不错~
  这里写图片描述
  这里写图片描述
  在 Windows 操作系统下,你要将档案分割需要如何作?伤脑筋吧!在Linux 底下就简单的多了!你要将档案分割的话,那么就使用 -b size来将一个分割的档案限制其大小,如果是行数的话,那么就使用 -l line来分割!好用的很!如此一来,你就可以轻易的将你的档案分割成软盘 (floppy)的大小,方便你copy 啰!

参数代换:xargs

  xargs 是在做什么的呢?就以字面上的意义来看, x 是加减乘除的乘号,args 则是 arguments (参数)的意思,所以说,这个玩意儿就是在产生某个指令的参数的意思! xargs 可以读入 stdin的数据,并且以空格符或断行字符作为分辨,将 stdin的资料分割成为 arguments 。 因为是以空格符作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空格符的时候, xargs 可能就会误判了~他的用法其实也还满简单的!就来看一看先!
  这里写图片描述
  这里写图片描述
  这里写图片描述
  其实,在 man xargs 里面就有三四个小范例,您可以自行参考一下内容。 此外, xargs 真的是很好用的一个玩意儿!您真的需要好好的参详参详!会使用 xargs的原因是,很多指令其实并不支持管线命令,因此我们可以透过 xargs来提供该指令引用 standard input之用!举例杢=来说,我们使用如下的范例来说明:
  这里写图片描述

关于减号-的用途

  管线命令在 bash 的连续的处理程序中是相当重要的!另外,在 log file 的分析当中也是相当重要的一环, 所以请特别留意!另外,在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的stdin , 某些指令需要用到文件名 (例如 tar)来进行处理时,该 stdin 不 stdout 可以利用减号 “-” 来替代,举丼例来说:
  这里写图片描述
  上面这个例子时说:我将 /home 里面的档案给他打包,但打包的数据不是纪录到档案,而是传送到stdout; 经过管线后,将 tar -cvf - /home 传送给后面的tar -xvf -。后面的这个 - 则是取用前一个指令的 stdout, 因此,我们就不需要使用 file 了!这是很常见的例子喔!注意注意!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值