Linux 命令 | 常用命令之 cut

cut 是 Linux 文本处理命令中比较简单的命令,没有复杂的参数,下面结合实例进行介绍。

一、基本概念

cut 命令将输入内容的每一行剪切字节、字符和字段,并将这些字节、字符和字段显示到标准输出,其中,输入内容可以从标准输入或文件中获取。

二、语法格式和参数

2.1 语法格式
cut [选项]… [文件]…

2.2 参数
-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

3.1 -d 和 -f 参数

情况一:选取第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 ~]#

3.2 -b 参数
以 /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编码),所以可能会出现乱码的情况。

3.3 -c 参数
以 /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

猜你喜欢

转载自blog.csdn.net/weixin_52395571/article/details/112466379