cut命令

cut命令不识别空格,只识别tab制表符

1. 样例内容

  1. //样例内容
  2. [root@kylin236 ~ 19:16:05]# cat /etc/hosts
  3. 10.80.34.58 h58 1 11
  4. 10.80.34.57 h57 2 22
  5. 10.80.34.59 h59 3 33
  6. 10.80.34.55 h55 4 44

2. cut -f 2 /etc/hosts -f 提取第几列

  1. [root@kylin236 ~ 19:11:11]# cat /etc/hosts
  2. 10.80.34.58 h58
  3. 10.80.34.57 h57
  4. 10.80.34.59 h59
  5. 10.80.34.55 h55
  6. [root@kylin236 ~ 19:11:17]# cut -f 2 /etc/hosts
  7. h58
  8. h57
  9. h59
  10. h55
  11. //这里cut不了是因为中间是空格
  12. [root@kylin236 ~ 19:10:12]# cut -f 2 /etc/hosts
  13. 10.80.34.58 h58
  14. 10.80.34.57 h57
  15. 10.80.34.59 h59
  16. 10.80.34.55 h55

3. grep -v 的取反可以将某一行去除不显示,也可以从几个数中取反

  1. [root@kylin236 ~ 19:11:19]# cut -f 2 /etc/hosts|grep -v "h58"
  2. h57
  3. h59
  4. h55

4. 提取第二,第三列 用逗号

  1. [root@kylin236 ~ 19:16:12]# cut -f 2,3 /etc/hosts
  2. h58 1
  3. h57 2
  4. h59 3
  5. h55 4

5. -c 字符范围

  1. n- 表示从第n个字符到行尾, n-m表示第n到第m个字符,-m表示从第一到第m个字符
  1. [root@kylin236 ~ 19:16:59]# cut -c -5 /etc/hosts
  2. 10.80
  3. 10.80
  4. 10.80
  5. 10.80
  6. [root@kylin236 ~ 19:21:32]# cut -c 5- /etc/hosts
  7. 0.34.58 h58 1 11
  8. 0.34.57 h57 2 22
  9. 0.34.59 h59 3 33
  10. 0.34.55 h55 4 44
  11. [root@kylin236 ~ 19:21:50]# cut -c 5-8 /etc/hosts
  12. 0.34
  13. 0.34
  14. 0.34
  15. 0.34

6. -d 指定某个分隔符的使用

cut -d “:” -f 1,3 /etc/passwd |grep root
找到非root用户
先找普通用户的行,再找列
如果不以哪个具体的分隔符来分割,就会不知道以谁为分割作为第一列。 默认是以制表符为分割的,cut命令无法识别空格,awk命令可以识别空格

对于一个有多个相同的字符可以用来作为分隔符的内容来说,指定的分隔符左侧是1,右侧是2位置,cut命令的序号无法从 0 开始

对于一个字符串来说,分隔符就是以当前分隔符为界限,分隔符左右分别是第一和第二列,无论这个字符串的长短
对于 ./XEAP 这个字符串来说
要注意在命令中的引号一般都是单引号。

  1. [root@node1 EMS]# find . -size +20k|grep XEAP
  2. ./XEAP_Address
  3. ./XEAP
  4. #第一列到第二列
  5. [root@214 EMS]# find . -size +20k|grep XEAP|grep -v ./XEAP_Address|awk '{print $1}'|cut -d 'E' -f 1,2
  6. ./XEAP
  7. #分隔符左边第一列
  8. [root@214 EMS]# find . -size +20k|grep XEAP|grep -v ./XEAP_Address|awk '{print $1}'|cut -d 'E' -f 1
  9. ./X
  10. #分隔符右边第一列
  11. [root@214 EMS]# find . -size +20k|grep XEAP|grep -v ./XEAP_Address|awk '{print $1}'|cut -d 'E' -f 2
  12. AP
  13. #获取不到2345列,因为以 E为分隔符,只能取分隔符一侧的内容,不能跨分隔符提取内从
  14. [root@214 EMS]# find . -size +20k|grep XEAP|grep -v ./XEAP_Address|awk '{print $1}'|cut -d 'E' -f 1,5
  15. ./X
  16. #没有第三列,因为字符串已经一分为二
  17. [root@214 EMS]# find . -size +20k|grep XEAP|grep -v ./XEAP_Address|awk '{print $1}'|cut -d 'E' -f 3
  1. [root@kylin236 ~ 19:35:33]# grep "/bin/bash" /etc/passwd|grep -v "root"|cut -d ":" -f 1
  2. sysadm
  3. secadm
  4. audadm
  5. emsadm
  1. [root@kylin236 ~ 19:33:52]# grep "/bin/bash" /etc/passwd|grep -v "root"
  2. sysadm:x:1000:1000::/sysadm:/bin/bash
  3. secadm:x:1001:1001::/secadm:/bin/bash
  4. audadm:x:1002:1002::/audadm:/bin/bash
  5. emsadm:x:1005:1006::/home/emsadm:/bin/bash

如果先找列,必定会多出来一些内容,

  1. [root@kylin236 ~ 19:34:05]# cut -d ":" -f 1,3 /etc/passwd |grep root
  2. root:0