简介

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 选项的使用

  1. [root@localhost ~]# who
  2. root pts/0 2021-05-09 00:17 (172.16.93.1)
  3. [root@localhost ~]# who | cut -b 4
  4. t
  5. [root@localhost ~]# who | cut -b 1-4
  6. root
  7. ## -3表示从第一个字节到第三个字节
  8. [root@localhost ~]# who | cut -b -3
  9. roo
  10. ## 3-表示从第三个字节到行尾
  11. [root@localhost ~]# who | cut -b 3-
  12. ot pts/0 2021-05-09 00:17 (172.16.93.1)
  13. ## -3 和 3- 同时会有什么反应,答案是输出整行,不会出现连续两个重叠的第三个字节的
  14. [root@localhost ~]# who | cut -b -3,3-
  15. root pts/0 2021-05-09 00:17 (172.16.93.1)

注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。

  1. [root@localhost ~]# who
  2. root pts/0 2021-05-09 00:17 (172.16.93.1)
  3. [root@localhost ~]# who | cut -b 10,1-4
  4. rootp

-c 选项的使用

  1. [root@localhost ~]# who | cut -c 1-4
  2. root

-b 和 -c 的区别

[root@localhost ~]# who | cut -b 1-4 root [root@localhost ~]# who | cut -c 1-4 root

额 看着怎么和-b没有什么区别啊?莫非-b和-c作用一样? 其实不然

  1. [root@localhost ~]# tee tr.txt
  2. 周杰伦
  3. 周杰伦
  4. 邓紫棋
  5. 邓紫棋
  6. 薛子谦
  7. 薛子谦
  8. [root@localhost ~]# cat tr.txt
  9. 周杰伦
  10. 邓紫棋
  11. 薛子谦
  12. [root@localhost ~]# cat tr.txt | cut -b 1
  13. [root@localhost ~]# cat tr.txt | cut -b 1-3
  14. [root@localhost ~]# cat tr.txt | cut -c 1

总结: -c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。

-n 选项的使用

当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。

  1. [root@localhost ~]# tee > tr.txt
  2. 周杰伦
  3. 邓紫棋
  4. 薛子谦
  5. [root@localhost ~]# cat tr.txt
  6. 周杰伦
  7. 邓紫棋
  8. 薛子谦
  9. [root@localhost ~]# cat tr.txt | cut -b 1
  10. [root@localhost ~]# cat tr.txt | cut -b 1-3
  11. [root@localhost ~]# cat tr.txt | cut -nb 1

—complement 选项

  1. [root@localhost ~]# cat tr.txt
  2. 周杰伦
  3. 邓紫棋
  4. 薛子谦
  5. [root@localhost ~]# cat tr.txt | cut -c 1
  6. [root@localhost ~]# cat tr.txt | cut -c 1 --complement
  7. 杰伦
  8. 紫棋
  9. 子谦

-d 和 -f 选项的使用

  1. [root@localhost ~]# cat /etc/passwd | cut -d ':' -f 1 | head -n 5
  2. root
  3. bin
  4. daemon
  5. adm
  6. lp

—output-delimiter 的使用

  1. [root@localhost ~]# head -n 5 /etc/passwd | cut -d ':' -f 1,7
  2. root:/bin/bash
  3. bin:/sbin/nologin
  4. daemon:/sbin/nologin
  5. adm:/sbin/nologin
  6. lp:/sbin/nologin
  7. [root@localhost ~]# head -n 5 /etc/passwd | cut -d ':' -f 1,7 --output-delimiter=-
  8. root-/bin/bash
  9. bin-/sbin/nologin
  10. daemon-/sbin/nologin
  11. adm-/sbin/nologin
  12. lp-/sbin/nologin