仓酷云

标题: CentOS教程之Centos下令――cut [打印本页]

作者: 山那边是海    时间: 2015-1-14 21:17
标题: CentOS教程之Centos下令――cut
欢迎大家来到仓酷云论坛!1.一两句话形貌一下cut下令吧!
正如其名,cut的事情就是“剪”,详细的说就是在文件中卖力剪切数据用的。
cut是以每举动一个处置工具的,这类机制和sed是一样的。(关于sed的进门文章将在近期公布)

2.cut一样平常以甚么为根据呢?也就是说,我怎样告知cut我想定位到的剪切内容呢?
cut下令次要是承受三个定位***:
第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f

3.以“字节”定位,给个最复杂的例子?
举个例子吧,当你实行ps下令时,会输入相似以下的内容:
[rocrocket@rocrocketprogramming]$who
rocrocket:0    2009-01-0811:07
rocrocketpts/0   2009-01-0811:23(:0.0)
rocrocketpts/1   2009-01-0814:15(:0.0)

假如我们想提取每行的第3个字节,就如许:
[rocrocket@rocrocketprogramming]$who|cut-b3
c
c
c
看分明了吧,-b前面能够设定要提取哪个字节,实在-b和3之间没有空格也是能够的,但保举有空格:)

4.假如“字节”定位中,我想提取第3,第4、第5和第8个字节,怎样办?
-b撑持形如3-5的写法,并且多个定位之间用逗号离隔就成了。看看例子吧:
[rocrocket@rocrocketprogramming]$who|cut-b3-5,8
croe
croe
croe
但有一点要注重,cut下令假如利用了-b选项,那末实行此下令时,cut会先把-b前面一切的定位举行从小到年夜排序,然后再提取。可不克不及倒置定位的按次哦。这个例子就能够申明这个成绩:
[rocrocket@rocrocketprogramming]$who|cut-b8,3-5
croe
croe
croe

5.另有哪些相似“3-5”如许的小技能,枚举一下吧!
[rocrocket@rocrocketprogramming]$who
rocrocket:0    2009-01-0811:07
rocrocketpts/0   2009-01-0811:23(:0.0)
rocrocketpts/1   2009-01-0814:15(:0.0)
[rocrocket@rocrocketprogramming]$who|cut-b-3
roc
roc
roc
[rocrocket@rocrocketprogramming]$who|cut-b3-
crocket:0    2009-01-0811:07
crocketpts/0   2009-01-0811:23(:0.0)
crocketpts/1   2009-01-0814:15(:0.0)
想必你也看到了,-3暗示从第一个字节到第三个字节,而3-暗示从第三个字节到行尾。假如你仔细,你能够看到这两种情形下,都包含了第三个字节“c”。
假如我实行who|cut-b-3,3-,你以为会怎样呢?谜底是输入整行,不会呈现一连两个堆叠的c的。看:
[rocrocket@rocrocketprogramming]$who|cut-b-3,3-
rocrocket:0    2009-01-0811:07
rocrocketpts/0   2009-01-0811:23(:0.0)
rocrocketpts/1   2009-01-0814:15(:0.0)

6.给个以字符为定位标记的最复杂的例子吧!
上面例子你素昧平生,提取第3,第4,第5和第8个字符:
[rocrocket@rocrocketprogramming]$who|cut-c3-5,8
croe
croe
croe
不外,看着怎样和-b没有甚么区分啊?难道-b和-c感化一样?实在否则,看似不异,只是由于这个例子举的欠好,who输入的都是单字节字符,以是用-b和-c没有区分,假如你提取中文,区分就看出来了,来,看看中文提取的情形:
[rocrocket@rocrocketprogramming]$catcut_ch.txt
礼拜一
礼拜二
礼拜三
木曜日
[rocrocket@rocrocketprogramming]$cut-b3cut_ch.txt
?
?
?
?
[rocrocket@rocrocketprogramming]$cut-c3cut_ch.txt




看到了吧,用-c则会以字符为单元,输入一般;而-b只会傻傻的以字节(8位二进制位)来盘算,输入就是乱码。
既然提到了这个常识点,就再增补一句,假如你学不足力,就进步一下。
当碰到多字节字符时,可使用-n选项,-n用于告知cut不要将多字节字符拆开。例子以下:
[rocrocket@rocrocketprogramming]$catcut_ch.txt|cut-b2
[rocrocket@rocrocketprogramming]$catcut_ch.txt|cut-nb2
?
?
?
?
[rocrocket@rocrocketprogramming]$catcut_ch.txt|cut-nb1,2,3





7.域是怎样回事呢?注释注释:
为何会有“域”的提取呢,由于方才提到的-b和-c只能在流动格局的文档中提失信息,而关于非流动格局的信息则一筹莫展。这时候候“域”就派上用处了。
(上面的解说内容是在假定你对/etc/passwd文件的内容和构造情势对照懂得的情形下举行的。)
假如你察看过/etc/passwd文件,你会发明,它其实不像who的输入信息那样具有流动格局,而是对照零星的排放。可是,冒号在这个文件的每行中都起到了十分主要的感化,冒号用来离隔每个项。
我们很侥幸,cut下令供应了如许的提取体例,详细的说就是设置“距离符”,再设置“提取第几个域”,就OK了!
以/etc/passwd的前五行内容为例:
[rocrocket@rocrocketprogramming]$cat/etc/passwd|head-n5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[rocrocket@rocrocketprogramming]$cat/etc/passwd|head-n5|cut-d:-f1
root
bin
daemon
adm
lp
看到了吧,用-d来设置距离符为冒号,然后用-f来设置我要取的是第一个域,再按回车,一切的用户名就都列出来了!呵呵有成绩感吧!
固然,在设定-f时,也能够利用比方3-5大概4-相似的格局:
[rocrocket@rocrocketprogramming]$cat/etc/passwd|head-n5|cut-d:-f1,3-5
root:0:0:root
bin:1:1:bin
daemon:2:2:daemon
adm:3:4:adm
lp:4:7:lp
[rocrocket@rocrocketprogramming]$cat/etc/passwd|head-n5|cut-d:-f1,3-5,7
root:0:0:root:/bin/bash
bin:1:1:bin:/sbin/nologin
daemon:2:2:daemon:/sbin/nologin
adm:3:4:adm:/sbin/nologin
lp:4:7:lp:/sbin/nologin
[rocrocket@rocrocketprogramming]$cat/etc/passwd|head-n5|cut-d:-f-2
root:x
bin:x
daemon:x
adm:x
lp:x

8.假如碰到空格和制表符时,怎样分辩呢?我以为有点乱,怎样办?
偶然候制表符的确很难识别,有一个***能够看出一段空格究竟是由多少个空格构成的仍是由一个制表符构成的。
[rocrocket@rocrocketprogramming]$cattab_space.txt
thisistabfinish.
thisisseveralspacefinish.
[rocrocket@rocrocketprogramming]$sed-nltab_space.txt
thisistab        finish.$
thisisseveralspacefinish.$
看到了吧,假如是制表符(TAB),那末会显现为        标记,假如是空格,就会原样显现。
经由过程此***便可以判别制表符和空格了。
注重,下面sed-n前面的字符是L的小写字母哦,不要看错。(字母l、数字1另有或运算|真是难分辩啊…,看来这三个比制表符还难分辩…)

9.我应当在cut-d顶用甚么标记来设定制表符或空格呢?
偷偷的告知你,cut的-d选项的默许距离符就是制表符,以是当你就是要利用制表符的时分,完整就能够省略-d选项,而间接用-f来取域就能够了!宁神,信任我!
假如你设定一个空格为距离符,那末就如许:
[rocrocket@rocrocketprogramming]$cattab_space.txt|cut-d-f1
this
this
注重,两个单引号之间可的确要有一个空格哦,不克不及偷懒。
并且,你只能在-d前面设置一个空格,可不准设置多个空格,由于cut只同意距离符是一个字符。
[rocrocket@rocrocketprogramming]$cattab_space.txt|cut-d-f1
cut:thedelimitermustbeasinglecharacter
Try`cut--helpformoreinformation.

10.我想将ps和cut下令共同利用时,怎样老是在最初两行呈现反复征象?
这个成绩的详细形貌是以下如许的。
当cut和ps共同时:
[rocrocket@rocrocketprogramming]$ps
PIDTTYTIMECMD
2977pts/000:00:00bash
5032pts/000:00:00ps
[rocrocket@rocrocketprogramming]$ps|cut-b3
P
9
0
0
看,最初的0反复了两次!!并且,我也试过psef或psaux均有此成绩。
而当ps和其他下令共同时,均无此成绩,比方cut和who共同则一般:
[rocrocket@rocrocketprogramming]$who
rocrocket:02009-01-0811:07
rocrocketpts/02009-01-0811:23(:0.0)
rocrocketpts/12009-01-0814:15(:0.0)
[rocrocket@rocrocketprogramming]$who|cut-b3
c
c
c
这个看似奇异的令我百思不得其解的成绩,失掉了sunway的解答,在此十分感激他。我提问的原帖地点在[此处]。
实在这个成绩是如许的,ps|cut会本身创立一个历程,以是当ps时也会提掏出这个历程,然后经由过程管道输入到cut,以是cut截取后,就多出了一行,之以是会反复上一行内容,是因为我们刚巧取到了和上一行内容不异的字符罢了。
你测试下实行ps和ps|cat就晓得缘故原由了!:)

11.cut有哪些缺点和不敷?
猜出来了吧?对,就是在处置多空格时。
假如文件内里的某些域是由多少个空格来距离的,那末用cut就有点贫苦了,由于cut只善于处置“以一个字符距离”的文本内容。如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
作者: 金色的骷髅    时间: 2015-1-17 10:02
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
作者: 小女巫    时间: 2015-1-25 09:56
上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
作者: 谁可相欹    时间: 2015-2-2 21:56
Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。
作者: 飘灵儿    时间: 2015-2-8 10:05
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
作者: 不帅    时间: 2015-2-25 14:20
linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!
作者: 蒙在股里    时间: 2015-3-7 22:56
Linux的成功就在于用最少的资源最短的时间实现了所有功能,这也是符合人类进化的,相信以后节能问题会日益突出。
作者: 简单生活    时间: 2015-3-15 22:23
期间我阅读了不少关于Linux的相关资料,其中也不乏一些有趣的小故事,这既丰富了我的课余生活,也让我加深了对一些术语的理解,比玩游戏强多了。?
作者: 透明    时间: 2015-3-22 17:10
清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2