“五分钟学命令系列”之十四《cut命令》

2015年10月12日14:03:53 3 8,666

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。 cut是以每一行为一个处理对象的,这种机制和sed是一样的。

一、cut参数

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

二、以字节定位

[root@localhost ~]# who
root tty1 2015-05-15 16:33
root pts/2 2015-10-08 15:20
[root@localhost ~]# who|cut -b 2
o
o

PS:-b后面可以设定要提取哪一个字节,其实-b和2之间没有空格也是可以的,但推荐有空格

三、在字节定位中提取多个字节

-b支持形如1-2的写法,而且多个定位之间用逗号隔开就成了

[root@localhost ~]# who|cut -b 1-2,4
rot
rot

PS:cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。

另外还有其他一些定位多字节的小技巧,如下:

[root@localhost ~]# who | cut -b -3
roo
roo
[root@localhost ~]# who | cut -b 3-
ot tty1 2015-05-15 16:33
ot pts/2 2015-10-08 15:20
[root@localhost ~]# who | cut -b -3,3-
root tty1 2015-05-15 16:33
root pts/2 2015-10-08 15:20

PS:-3表示从第一个字节到第三个字节,而3-表示从第三个字节到行尾。如果你细心,你可以看到这两种情况下,都包括了第三个字节“o”。而自行-3,3-则是输出整行,不会出现重叠的o

四、以字符定位

如果输出的都是单字节字符,用-b和-c没有区别,如果你提取中文,区别就看出来了

[root@localhost ~]# cat test.txt
今天天气真好
[root@localhost ~]# cut -c 4 test.txt
气
[root@localhost ~]# cut -b 3 test.txt

PS:用-c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码

当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开

[root@localhost ~]# cut -nb 1,2,3 test.txt
今

五、以域定位

因为-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策

[root@localhost ~]# cat /etc/passwd | head -n 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd | head -n 3 | cut -d : -f 3
0
1
2

用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域,用head -n设置取几行

PS:在设置-f时,也可以用上面第三点的方法取多个域

六、分辨空格和制表符

[root@localhost ~]# cat test.txt
this is tab finish.
this is several space finish.
[root@localhost ~]#sed -n l test.txt
this is tab\tfinish.$
this is several space finish.$

可以看到如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示。

七、cut -d中用什么符号来设定制表符或空格

cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了

[root@localhost ~]# cat test.txt | cut -d ' ' -f 1
this
this

PS:两个单引号之间要有一个空格,而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符

八、 cut有哪些缺陷和不足

就是在处理多空格时。如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容

weinxin
聂扬帆博客
一个分享IT运维相关工作经验和实战技巧的个人博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  3   博主  0

    • avatar 淘抢购 0

      很相信 支持一下

      • avatar 卢妍SEO 1

        命令好学,关键是学会了不用,全都忘了

          • avatar yangfannie 5

            @卢妍SEO 每天过来看一眼就不会忘了哈