cut是一个选取命令,就是将一行读入,提取我们想要的部分。cut是以行为单位处理的。
命令格式:
cut [选项参数] file
如果不指定file,cut将从标准输入中读取内容
主要参数:
-b:以字节为单位进行分割,这些字节位置将忽略多字节符边界,除非指定了-n标识
-c: 以字符为单位进行分割
-d: 指定分隔符,默认为制表符
-f: 与d一起使用,指定显示那个域
-n:与 b一起使用,取消分割多字节
注意字节和字符的不同。有些字符是单字节的,比如大小写字母,有些是多字节的,比如汉字。 使用-c可以处理多字节的字符,汉字也可以正常的分割,-d以字节为单位分割,处理汉字会出现乱码,如果与-n一起使用,则可以处理多字节字符。
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
提取第4个字符:
[root@localhost ~]# cat /etc/passwd | cut -b 4
t
提取前4个字符:
[root@localhost ~]# cat /etc/passwd | cut -b -4
root
提取从1-2,4-8, 9到最后的字符
[root@localhost ~]# cat /etc/passwd | cut -b 1-2,4-8,9-
rot:x:0:0:root:/root:/bin/sh
可以用-表示范围,-4,表示从开头到第4个,9-表示从第9个到最后。
注意:cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。使用该命令,无法实现改变顺序的功能。
比如,想让x放在root的前面,
[root@localhost ~]# cat /etc/passwd | cut -b 6,-4
rootx
结果显示:root还是在x前面,所以无法实现改变顺序的功能。
如果我执行who|cut -b -3,3-,你觉得会如何呢?答案是输出整行,不会出现连续两个重叠的第3个字符。
按:分割,提取-2,3,4-的域
[root@localhost ~]# cat /etc/passwd | cut -d : -f -2,3,5-
root:x:0:root:/root:/bin/sh
介绍一个-c和-d的区别
[rocrocket@rocrocket programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt
�
�
�
�
[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt
一
二
三
四
看到了吧,用-c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。
既然提到了这个知识点,就再补充一句,如果你学有余力,就提高一下。
当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。例子如下:
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2
�
�
�
�
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2
星
星
星
星
参考博客:http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html
写的很详细,大家可以看看。