cut命令

定义

cut是一个选取命令,选取文件中的指定字符,主要有如下用途

(1)文件内容查看

(2)显示行中的指定部分,删除文件中指定字段

(3)显示文件的指定内容。

 

语法格式

cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]

使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

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

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

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

 

主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f  :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。

 

使用指南

按字节,字符,域 切割举例

(1) 以“字节”定位

简单取字节
[centos@s203 ~]$ ll
total 524
drwxrwxr-x. 12 centos centos    150 Jan 26 17:17 anaconda3
drwxrwxr-x.  4 centos centos     37 Oct 11  2018 ha
drwxrwxr-x.  4 centos centos     37 Jul 22  2018 hadoop
drwxrwxr-x.  3 centos centos     18 Nov  2  2018 kafka
drwxrwxr-x.  2 centos centos     19 Aug 23  2018 log
drwxrwxr-x.  2 centos centos     21 Aug 24  2018 logs
drwxrwxr-x.  3 centos centos     56 Apr  5 01:03 zookeeper
-rw-rw-r--.  1 centos centos 534884 Apr  5 01:03 zookeeper.out

按字节切割:

[centos@s203 ~]$ ll |cut -b 3
t
w
w
w
w
w
w
w
w

“字节”定位中,取多字节字节(- 和,)

  -b支持形如3-5的写法,而且多个定位之间用逗号隔开

[centos@s203 ~]$ cat test.sh
No Name Mark Percent
tom 69 91
jack 71 87
alex 68 98
[centos@s203 ~]$ cut  -b 2-4,8 test.sh
o N
om 9
ack
lex

但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从索引小到大排序,然后再提取。所以颠倒顺序提取数据的方式不可行。

[centos@s203 ~]$ cut  -b 8,2-4 test.sh
o N
om 9
ack
lex

扩展 -num num-

[centos@s203 ~]$ cut  -b -4 test.sh
No N
tom
jack
alex
[centos@s203 ~]$ cut  -b 4- test.sh
Name Mark Percent
 69 91
k 71 87
x 68 98

不会重叠

[centos@s203 ~]$ cat test.sh
No Name Mark Percent
tom 69 91
jack 71 87
alex 68 98
[centos@s203 ~]$ cut  -b 4-,-4 test.sh
No Name Mark Percent
tom 69 91
jack 71 87
alex 68 98
[centos@s203 ~]$ cut  -b 4-8,3-7 test.sh
 Name
m 69 9
ck 71
ex 68

(2)以字符为定位

对单字节字符没有什么不同,对多字节字符的影响比较大。

[centos@s203 ~]$ cat test.sh

[centos@s203 ~]$ cut -b 4-,-4 test.sh
No Name Mark Percent
王 69 91
找 71 87
李 68 98

[centos@s203 ~]$ cut  -b 1 test1.sh
N
▒
▒
▒

[centos@s203 ~]$ cut  -c 1 test1.sh
N
王
找
李

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

[centos@s203 ~]$ cut  -nb 1 test1.sh
N
王
找
李

(3)以域为定位

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

 3.1cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域
[centos@s203 ~]$ cat -n  test2.sh
     169      91
     271      87
     368      98
     
[centos@s203 ~]$ cat -T test2.sh^I69^I91
找^I71^I87
李^I68^I98

[centos@s203 ~]$ cut -f 2 test2.sh
69
71
68

3.2 -d后面设置一个空格和字符,可不许设置多个空格或字符,因为cut只允许间隔符是一个字符

[centos@s203 ~]$ cat test.sh
No Name Mark Percent
tom 69 91
jack 71 87
alex 68 98
[centos@s203 ~]$ cut -d ' ' -f 2 test.sh
Name
69
71
68
[centos@s203 ~]$ cut -d 'xx' -f 2 test.sh
cut: the delimiter must be a single character

cut有哪些缺陷就是在处理多空格时。

3.3观察指定分隔符和多字段取数

[centos@s203 ~]$ cat test3.sh
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
[centos@s203
~]$ cut -d ':' -f 3-5,7 test3.sh 0:0:root:/bin/bash 1:1:bin:/sbin/nologin 2:2:daemon:/sbin/nologin 3:4:adm:/sbin/nologin 4:7:lp:/sbin/nologin

 

posted @ 2019-05-27 16:24  wqbin  阅读(3340)  评论(0编辑  收藏  举报