第十一章、认识与学习 BASH 管线命令 (pipe)
管线命令使用『 | 』界定符号
[root@www ~]# ls -al /etc | less
管线命令『 | 』仅能处理经由前面一个命令传来的正确信息,也就是 standard output 的信息,对于 stdandard error 并没有直接处理的能力。
图 6.1.1、 管线命令的处理示意图
- 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
- 管线命令必须要能够接受来自前一个命令的输出数据成为 standard input 继续处理才行。
撷取命令: cut, grep
撷取信息通常是针对『一行一行』来分析的,
并不是整篇信息分析
- cut
[root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [root@www ~]# cut -c 字符区间 <==用于排列整齐的信息 选项与参数: -d :后面接分隔字符。与 -f 一起使用; -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思; -c :以字符 (characters) 的单位取出固定字符区间; 范例一:将 PATH 变量取出,我要找出第五个路径。 [root@www ~]# echo $PATH /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games: # 1 | 2 | 3 | 4 | 5 | 6 | 7 [root@www ~]# echo $PATH | cut -d ':' -f 5 # 如同上面的数字显示,我们是以『 : 』作为分隔,因此会出现 /usr/local/bin # 那么如果想要列出第 3 与第 5 呢?,就是这样: [root@www ~]# echo $PATH | cut -d ':' -f 3,5 范例二:将 export 输出的信息,取得第 12 字符以后的所有字符串 [root@www ~]# export declare -x HISTSIZE="1000" declare -x INPUTRC="/etc/inputrc" declare -x KDEDIR="/usr" declare -x LANG="zh_TW.big5" .....(其他省略)..... # 注意看,每个数据都是排列整齐的输出!如果我们不想要『 declare -x 』时, # 就得这么做: [root@www ~]# export | cut -c 12- HISTSIZE="1000" INPUTRC="/etc/inputrc" KDEDIR="/usr" LANG="zh_TW.big5" .....(其他省略)..... # 知道怎么回事了吧?用 -c 可以处理格式化数据! # 我们还可以指定某个范围的值,例如第 12-20 的字符,就是 cut -c 12-20 等等! 范例三:用 last 将显示的登陆者的信息中,仅留下用户大名 [root@www ~]# last root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33) root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16) # last 可以输出『账号/终端机/来源/日期时间』的数据,并且是排列整齐的 [root@www ~]# last | cut -d ' ' -f 1 # 由输出的结果我们可以发现第一个空白分隔的字段代表账号,所以使用如上命令: # 但是因为 root pts/1 之间空格有好几个,并非仅有一个,所以,如果要找出 # pts/1 其实不能以 cut -d ' ' -f 1,2 !输出的结果会不是我们想要的。
cut 主要的用途在于将『同一行里面的数据进行分解!』最常使用在分析一些数据或文字数据的时候! 这是因为有时候我们会以某些字符当作分割的参数,然后来将数据加以切割,以取得我们所需要的数据。