Linux命令之cut

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
写的很详细,大家可以看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值