cut 列提取命令

  • 本文为慕课网shell编程之正则表达式第二章第一节关于 cut 命令的笔记,在此感谢 Tony 老师的讲解。

    cut 列提取命令

    cut [选项] 文件名
    选项:
    -f 列号:提取第几列
    -d 分隔符:按照指定的分隔符分割列,默认制表符为分隔符
1
2
3
4
5
[root@localhost ~]# cat student.txt 
ID Name Gender Mark
1 stu1 F 95
2 stu2 F 85
3 stu3 F 75
1
2
3
4
5
[root@localhost ~]# cut -f 2 student.txt #截取一列
Name
stu1
stu2
stu3
1
2
3
4
5
[root@localhost ~]# cut -f 2,4 student.txt #截取不连续多列,用“,”隔开
Name Mark
stu1 95
stu2 85
stu3 75
1
2
3
4
5
[root@localhost ~]# cut -f 2-4 student.txt #截取连续多列,用“-”隔开
Name Gender Mark
stu1 F 95
stu2 F 85
stu3 F 75
1
2
3
4
5
6
7
8
[root@localhost ~]# df -h | cut -f 1 #df 输出结果间隔符为空格,默认间隔符为制表符,找不到间隔符认为所有内容为一列
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 1.6G 46G 4% /
devtmpfs 488M 0 488M 0% /dev
tmpfs 497M 24K 497M 1% /dev/shm
tmpfs 497M 292K 497M 1% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/0
1
2
3
4
5
6
7
8
[root@localhost ~]# df -h | cut -f 1,3 -d " " #间隔符为多个空格,指定一个空格截取后的内容还是空格 
Filesystem
/dev/vda1
devtmpfs
tmpfs
tmpfs
tmpfs
tmpfs

cut 只能作简单截取,复杂截取需使用 awk 命令

cut 与 grep 提取系统普通用户

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# useradd user1
[root@localhost ~]# useradd user2
[root@localhost ~]# grep "/bin/bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
[root@localhost ~]# grep "/bin/bash" /etc/passwd | grep -v "root" #“-v”选项代表取反,排除 root 用户
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
[root@localhost ~]# grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":" #截取用“:”隔开的第一列字符串
user1
user2