介绍

cut 译为“剪切, 切割” ,它是一个强大文本处理工具,它可以将文本按列进行划分处理。cut 命令逐行读入文本,然后按列划分字段并进行提取、输出等操作。

语法

1
cut [options] filename

options参数说明:

选项参数 功能
-f 提取范围 列号,获取第几列
-d 自定义分隔符 自定义分隔符,默认为制表符。
-c 提取范围 以字符为单位进行分割
-b 提取范围 以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-n 与“-b”选项连用,不分割多字节字符;

提取范围说明:

提取范围 说明
n- 提取指定第n列或字符或字节后面所有数据
n-m 提取指定第n列或字符或字节到第m列或字符或字节中间的所有数据
-m 提取指定第m列或字符或字节前面所有数据
n1,n2,… 提前指定枚举列的所有数据

示例:

  • cut切割提取列:cut 文件或数据 -d 分隔符切割 -f 提取第X列
  • cut切割提取字符:cut 文件或数据 -c 提取字符范围
  • cut切割提取字节:cut 文件或数据 -nb 提取字节范围

演示

准备数据文件:cut1.txt

1
touch cut1.txt

编辑文件添加内容

1
2
3
4
AA  hello 11 XX
BB world 22 XXX
CC Shell 33 XXXX
DD it 44 XXXXXXX

1.切割提取指定列数据

提取文件中第一列数据:

1
2
3
4
5
6
7
cut cut1.txt -d " " -f 1

#输出
AA
BB
CC
DD

提取文件中第一列,第三列,枚举查找:

1
2
3
4
5
6
7
cut cut1.txt -d " " -f 1,3

#输出
AA 11
BB 22
CC 33
DD 44

提取文件中第二列、第三列、第四列,范围查找:

1
2
3
4
5
6
7
cut cut1.txt -d " " -f 2-4

#输出
hello 11
world 22
Shell 33
it 44

注意:由于cut1.txt文本文件第一列和第二列之间是2个空格,而我们设置的分隔符是1个空格,所以这里的第2列内容实际上是1个空格。

提取文件中第一列后面所有列的数据(从第二列开始一直到最后,包括第二列):

1
2
3
4
5
6
7
cut cut1.txt -d " "  -f 2- 

#输出
hello 11 XX
world 22 XXX
Shell 33 XXXX
it 44 XXXXXXX

提起文件中结束列前面所有列的数据(从开始一直到第三列,包括第三列):

1
2
3
4
5
6
7
cut cut1.txt -d " " -f -3  # -3 提取第3列前面所有列数据,包括第3列

#输出
AA hello
BB world
CC Shell
DD it

2.切割提取指定字符数据

提取每行前5个字符:

1
2
3
4
5
6
7
cut cut1.txt -c 1-5

#输出
AA h
BB w
CC S
DD i

提取每行第5个字符以后的数据:

1
2
3
4
5
6
7
cut cut1.txt -c 5-

#输出
hello 11 XX
world 22 XXX
Shell 33 XXXX
it 44 XXXXXXX

提取每行第5个字符前面所有字符:

1
2
3
4
5
6
7
cut cut1.txt -c -5

#输出
AA h
BB w
CC S
DD i

3.切割提取指定字节数据

提取字符串”abc传智播客” 前3个字节:

1
echo "abc传智播客" | cut -b -3

提取字符串”abc传智播客” 前4个字节:

1
echo "abc传智播客" | cut -b -4

提取字符串”abc传智播客” 前6个字节:

1
2
echo "abc传智播客" | cut -b -6
# 由于linux系统默认utf-8编码表, 所以一个汉字占3个字节

提取字符串”abc传智播客” 前4个字节,就可以将汉字 “传”输出:

1
2
echo "abc传智播客" | cut -nb -4
# -n 取消多字节字符分割直接输出

4.切割提取指定单词数据

在文本文件中切割出指定单词:

1
cat cut1.txt | grep itheima | cut -d " " -f 2

5.切割提取bash进程的PID号

1
ps -aux | grep 'bash' | head -n 1 | cut -d " " -f 8

6.切割提取IP地址

1
ifconfig | grep broadcast | cut -d " " -f 10

运行效果