1. 命令概述
- 命令名称:
cut
- 核心功能:从文件的每一行中剪切出指定的部分(列、字符、字节)
- 主要用途:文本处理、数据提取、日志分析、CSV文件处理
2. 语法格式
cut [选项] [文件]
3. 常用选项
| 选项 | 说明 |
|---|
-b | 按字节位置剪切 |
-c | 按字符位置剪切 |
-f | 按字段(列)剪切 |
-d | 指定字段分隔符(默认为制表符) |
-s | 不显示不包含分隔符的行 |
-n | 与 -b 一起使用,不分割多字节字符 |
--complement | 补集选择,显示未被选中的部分 |
--output-delimiter | 指定输出分隔符 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
4. 位置指定格式
- 单个位置:
N(第 N 个)
- 范围:
N-M(从 N 到 M)
- 起始到结束:
N-(从 N 到行尾)
- 开始到指定:
-M(从行首到 M)
- 多个位置:用逗号分隔,如
1,3,5 或 1-3,5-7
5. 常用实例详解
(1) 按字符位置剪切
# 提取每行的第1-5个字符
cut -c 1-5 file.txt
# 提取第1、3、5个字符
cut -c 1,3,5 file.txt
# 提取第3个字符到行尾
cut -c 3- file.txt
# 提取行首到第5个字符
cut -c -5 file.txt
(2) 按字节位置剪切
# 提取每行的第1-10个字节
cut -b 1-10 file.txt
# 提取第2、4、6个字节
cut -b 2,4,6 file.txt
(3) 按字段(列)剪切
# 提取第1列(默认分隔符为制表符)
cut -f 1 file.txt
# 使用逗号作为分隔符,提取第2列
cut -d ',' -f 2 file.csv
# 提取第1列和第3列
cut -d ',' -f 1,3 file.csv
# 提取第2列到第4列
cut -d ',' -f 2-4 file.csv
# 提取第3列到最后一列
cut -d ',' -f 3- file.csv
# 不显示不包含分隔符的行
cut -d ',' -s -f 1 file.csv
(4) 指定输出分隔符
# 使用分号作为输出分隔符
cut -d ',' -f 1,3 --output-delimiter=';' file.csv
(5) 补集选择
# 显示除了第2列以外的所有列
cut -d ',' -f 2 --complement file.csv
6. 实际应用场景
场景一:日志文件分析
# 提取日志中的时间戳(假设时间戳在前19个字符)
cut -c 1-19 access.log
# 提取IP地址(假设IP在第1列,空格分隔)
cut -d ' ' -f 1 access.log
# 提取状态码和请求路径(第9列和第7列)
cut -d ' ' -f 7,9 access.log
场景二:CSV文件处理
# 提取CSV文件的姓名和邮箱列(假设第1列和第3列)
cut -d ',' -f 1,3 users.csv
# 统计每列的唯一值数量
cut -d ',' -f 1 users.csv | sort | uniq -c
场景三:系统信息提取
# 提取/etc/passwd文件中的用户名(第1列)
cut -d ':' -f 1 /etc/passwd
# 提取用户ID和家目录(第3列和第6列)
cut -d ':' -f 3,6 /etc/passwd
# 提取所有用户的家目录
cut -d ':' -f 6 /etc/passwd
场景四:配置文件处理
# 提取环境变量中的路径
echo $PATH | cut -d ':' -f 1-3
# 提取IP地址的网段
echo "192.168.1.100" | cut -d '.' -f 1-3
7. 与其他命令的组合使用
(1) 结合 grep 过滤
# 查找包含"error"的行,并提取时间戳
grep "error" app.log | cut -c 1-19
# 查找特定用户,提取家目录
grep "tom" /etc/passwd | cut -d ':' -f 6
(2) 结合 sort 和 uniq 统计
# 统计访问最多的IP地址
cut -d ' ' -f 1 access.log | sort | uniq -c | sort -nr
# 统计状态码出现次数
cut -d ' ' -f 9 access.log | sort | uniq -c
(3) 结合 awk 处理复杂格式
# 对于复杂分隔符,cut 和 awk 可以配合使用
awk -F '[ :]+' '{print $1}' file.txt | cut -d ' ' -f 1
8. 注意事项
- 分隔符问题:默认分隔符是制表符,不是空格,使用
-d ' ' 指定空格分隔
- 多字节字符:
-c 按字符处理,-b 按字节处理,对于中文等多字节字符要使用 -c
- 字段编号:字段编号从1开始,不是0
- 空行处理:空行也会被处理,可以使用
-s 过滤不包含分隔符的行
- 性能考虑:对于大文件,
cut 比 awk 更快,但功能相对简单
9. 与 awk 命令的区别
| 命令 | 功能特点 | 适用场景 |
|---|
cut | 简单、快速,只能按固定位置或分隔符提取 | 简单的列提取、固定格式文件处理 |
awk | 功能强大,支持条件判断、计算、格式化输出 | 复杂文本处理、数据转换、报表生成 |
核心要点总结:
cut 用于从文本中提取指定的列、字符或字节
- 三种提取方式:
-c(字符)、-b(字节)、-f(字段)
- 常用选项:
-d(指定分隔符)、-s(过滤无分隔符行)
- 位置指定:
N、N-M、N-、-M、N,M,O
- 实际应用:日志分析、CSV处理、系统信息提取
- 性能优势:处理大文件时比
awk 更快
- 功能局限:不支持条件判断和复杂计算,适合简单提取任务