|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
欢迎大家来到仓酷云论坛!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教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们! |
|