目录
一、基本概念
二、语法格式和参数
2.1 语法格式
2.2 参数
三、实例讲解
3.1 -d 和 -f 参数
3.2 -b 参数
3.3 -c 参数
四、总结
五、参考文献
cut 是 Linux 文本处理命令中比较简单的命令,没有复杂的参数,下面结合实例进行介绍。
cut 命令将输入内容的每一行剪切字节、字符和字段,并将这些字节、字符和字段显示到标准输出,其中,输入内容可以从标准输入或文件中获取。
cut [选项]... [文件]...
-b :以字节为单位进行分割;
-c : 以字符为单位进行分割;
-d 分隔符 : 使用指定分隔符代替制表符作为划分符,默认使用制表符;
-f :选择指定的段,如果选择多个段使用 “,” 分隔;
其中,-b/-c/-f 后跟选取的字节/字符/片段,num 从 1 开始,格式如下:
num : 选取第num个字节/字符/片段;
num1,num2,num3 : 选取第num1,num2,num3的字节/字符/片段;
num- : 选取第num个字节/字符/片段一直到结尾;
num1-num2 : 选取第num1到num2的字节/字符/片段;
-num : 选取第1个到num个的字节/字符/片段;
常用的参数为 -d 和 -f 。
实例将通过 /etc/passwd 文件前10 行进行讲解,如下所示:
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
情况一:选取第num片段
选取以 “:” 为分隔的第1个片段,如下所示:
[root@localhost ~]# cat passwd
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# cut -d ":" -f 1 passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
[root@localhost ~]#
情况二:选取第num1,num2,num3 片段
选取以 “:” 为分隔中的第1片段和第3片段,如下所示:
[root@localhost ~]# cut -d ":" -f 1,3 passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
[root@localhost ~]#
情况三、选取第num片段到结尾
选取以 “:” 为分隔中的第2片段到最后,如下所示:
[root@localhost ~]# cut -d ":" -f 2- passwd
x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
x:2:2:daemon:/sbin:/sbin/nologin
x:3:4:adm:/var/adm:/sbin/nologin
x:4:7:lp:/var/spool/lpd:/sbin/nologin
x:5:0:sync:/sbin:/bin/sync
x:6:0:shutdown:/sbin:/sbin/shutdown
x:7:0:halt:/sbin:/sbin/halt
x:8:12:mail:/var/spool/mail:/sbin/nologin
x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#
情况四、选取第num1片段到num2片段
选取以 “:” 为分隔中的第2片段和第4片段,如下所示:
[root@localhost ~]# cut -d ":" -f 2,4 passwd
x:0
x:1
x:2
x:4
x:7
x:0
x:0
x:0
x:12
x:0
[root@localhost ~]#
情况五、选取开始片段到num片段
选取以 “:” 为分隔中的第1片段到第5片段,如下所示:
[root@localhost ~]# cut -d ":" -f -5 passwd
root:x:0:0:root
bin:x:1:1:bin
daemon:x:2:2:daemon
adm:x:3:4:adm
lp:x:4:7:lp
sync:x:5:0:sync
shutdown:x:6:0:shutdown
halt:x:7:0:halt
mail:x:8:12:mail
operator:x:11:0:operator
[root@localhost ~]#
以 /etc/passwd 前 10 行为例,选取每行的第2个字节,如下所示:
[root@localhost ~]# cat passwd
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# cut -b 2 passwd
o
i
a
d
p
y
h
a
a
p
[root@localhost ~]#
如上所示,每个字节存储一个字符,所以,列出的是每行的第2个字符。
选取每行的前4个字节,如下所示:
[root@localhost ~]# cut -b -4 passwd
root
bin:
daem
adm:
lp:x
sync
shut
halt
mail
oper
[root@localhost ~]#
注意:当文本是中文的时候,可能会出现问题,如下所示:
[root@localhost ~]# cat chinese
飞流直下三千尺
疑是银河落九天
[root@localhost ~]# cut -b 1 chinese
▒
▒
[root@localhost ~]# cut -b 1-3 chinese
飞
疑
[root@localhost ~]#
因为一个汉字使用三个字节表示(采用UTF-8编码),所以可能会出现乱码的情况。
以 /etc/passwd 前 10 行为例,选取每行的第2个字符,如下所示:
[root@localhost ~]# cat passwd
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# cut -c 2 passwd
o
i
a
d
p
y
h
a
a
p
[root@localhost ~]#
选取每行的第1个字符到第4个字符,如下所示:
[root@localhost ~]# cut -c 1-4 passwd
root
bin:
daem
adm:
lp:x
sync
shut
halt
mail
oper
[root@localhost ~]#
选取指定字符的时候,中文也是可以的,如下所示:
[root@localhost ~]# cat chinese
飞流直下三千尺
疑是银河落九天
[root@localhost ~]# cut -c 2 chinese
流
是
[root@localhost ~]# cut -c 1-3 chinese
飞流直
疑是银
[root@localhost ~]#
cut 最常使用的参数为 -d 和 -f 组合使用,其它参数使用较少,注意使用 -b 文本为中文的情况,使用不当可能会出现乱码。在不使用输出重定向的情况下,cut命令不会改变原文件的内容。
[1] https://www.runoob.com/linux/linux-comm-cut.html
[2] https://man7.org/linux/man-pages/man1/cut.1.html