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只擅长处理“以一个字符间隔”的文本内容

2015年10月12日 下午2:06 沙发
很相信 支持一下
2015年10月12日 下午9:46 板凳
命令好学,关键是学会了不用,全都忘了
2015年10月13日 上午9:14 1层
@卢妍SEO 每天过来看一眼就不会忘了哈