简介
cut 命令的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中。我们可以使用 cut 命令从一行字符串中于以字节,字符,字段(分隔符)等单位截取一部分内容出来。
命令格式
cut OPTION… [FILE]…
常用参数
数字表示 | ||
---|---|---|
# | 第 # 个字段 | |
#,#[,#] | 离散的多个字段,例如 1,3,6 | |
#-# | 连续的多个字段,例如 1-6 | |
#,[#-#] | 混合使用, 如 1,[4-6] | |
-f | 与-d一起使用,指定显示哪个区域 | |
-d | 指定分隔符 (默认的分隔符 Tab) | |
—output-delimiter | 修改输出时使用的分隔符 | |
-b | 以字节为单位进行切割(这些字节位置将忽略多字节字符边界) | |
-NUM | 从第一个字节到第 NUM 个字节 | |
NUM- | 从第 NUM 个字节到行尾 | |
-NUM,NUM- | 输出整行 | |
-n | 取消分割多字节字符。仅和 -b 标志一起使用 | |
-c | 以字符为单位进行切割 | |
—complement | 补充选中的部分,即反选 |
示例
-b 选项的使用
[root@localhost ~]# who
root pts/0 2021-05-09 00:17 (172.16.93.1)
[root@localhost ~]# who | cut -b 4
t
[root@localhost ~]# who | cut -b 1-4
root
## -3表示从第一个字节到第三个字节
[root@localhost ~]# who | cut -b -3
roo
## 3-表示从第三个字节到行尾
[root@localhost ~]# who | cut -b 3-
ot pts/0 2021-05-09 00:17 (172.16.93.1)
## -3 和 3- 同时会有什么反应,答案是输出整行,不会出现连续两个重叠的第三个字节的
[root@localhost ~]# who | cut -b -3,3-
root pts/0 2021-05-09 00:17 (172.16.93.1)
注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。
[root@localhost ~]# who
root pts/0 2021-05-09 00:17 (172.16.93.1)
[root@localhost ~]# who | cut -b 10,1-4
rootp
-c 选项的使用
[root@localhost ~]# who | cut -c 1-4
root
-b 和 -c 的区别
[root@localhost ~]# who | cut -b 1-4 root [root@localhost ~]# who | cut -c 1-4 root
额 看着怎么和-b没有什么区别啊?莫非-b和-c作用一样? 其实不然
[root@localhost ~]# tee tr.txt
周杰伦
周杰伦
邓紫棋
邓紫棋
薛子谦
薛子谦
[root@localhost ~]# cat tr.txt
周杰伦
邓紫棋
薛子谦
[root@localhost ~]# cat tr.txt | cut -b 1
�
�
�
[root@localhost ~]# cat tr.txt | cut -b 1-3
周
邓
薛
[root@localhost ~]# cat tr.txt | cut -c 1
周
邓
薛
总结: -c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。
-n 选项的使用
当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。
[root@localhost ~]# tee > tr.txt
周杰伦
邓紫棋
薛子谦
[root@localhost ~]# cat tr.txt
周杰伦
邓紫棋
薛子谦
[root@localhost ~]# cat tr.txt | cut -b 1
�
�
�
[root@localhost ~]# cat tr.txt | cut -b 1-3
周
邓
薛
[root@localhost ~]# cat tr.txt | cut -nb 1
周
邓
薛
—complement 选项
[root@localhost ~]# cat tr.txt
周杰伦
邓紫棋
薛子谦
[root@localhost ~]# cat tr.txt | cut -c 1
周
邓
薛
[root@localhost ~]# cat tr.txt | cut -c 1 --complement
杰伦
紫棋
子谦
-d 和 -f 选项的使用
[root@localhost ~]# cat /etc/passwd | cut -d ':' -f 1 | head -n 5
root
bin
daemon
adm
lp
—output-delimiter 的使用
[root@localhost ~]# head -n 5 /etc/passwd | cut -d ':' -f 1,7
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
[root@localhost ~]# head -n 5 /etc/passwd | cut -d ':' -f 1,7 --output-delimiter=-
root-/bin/bash
bin-/sbin/nologin
daemon-/sbin/nologin
adm-/sbin/nologin
lp-/sbin/nologin