文章目录
- echo “Hello World” | cut -c1-5 输出: Hello 💡 -c1-5 表示提取第 1 到第 5 个字符。
- 假设有一个 CSV 文件 data.csv 内容如下: name,age,city Alice,28,Beijing Bob,32,Shanghai Charlie,25,Guangzhou 提取第二列(年龄): cut -d’,’ -f2 data.csv 输出: age283225
- cut -d’,’ -f1,3 data.csv –output-delimiter=’ | ‘ 输出: name | cityAlice | BeijingBob | ShanghaiCharlie | Guangzhou
- echo “This line has no delimiter” > test.txt echo “name:age:city” >> test.txt cut -d’:’ -f1 -s test.txt 输出: name 💡 只输出包含分隔符 : 的行。
- ip=$(hostname -I | cut -d’ ‘ -f1) echo “当前主机IP为:$ip”
- 假设 config.env 内容如下: DB_HOST=localhost DB_PORT=3306 DB_USER=root 提取所有键名: grep ‘=’ config.env | cut -d’=’ -f1 输出: DB_HOST DB_PORT DB_USER
- lscpu | grep ‘Model name’ | cut -d’:’ -f2 | sed ‘s/^ *//;s/ *$//’ 输出类似: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
目录
- 一、前言
- 二、什么是 cut?
- ✅ 典型用途包括:
- 三、cut 基础语法
- ✅ 常用选项说明:
- 四、cut 使用示例
- ✅ 示例1:按字符提取(-c)
- ✅ 示例2:按字段提取(-f+-d)
- ✅ 示例3:修改输出分隔符(–output-delimiter)
- ✅ 示例4:只提取有分隔符的行(-s)
- 五、cut 在 Shell 脚本中的应用
- ✅ 示例1:提取 IP 地址(结合hostname)
- ✅ 示例2:解析环境变量配置文件
- ✅ 示例3:获取 CPU 型号名称(结合lscpu)
- 六、cut 与其他命令的配合使用
- ✅ 示例1:提取日志中的 URL 并排序去重(cut+sort+uniq)
- ✅ 示例2:统计访问次数最多的 IP(cut+grep+awk)
- 七、cut 使用技巧总结
- 八、cut 实战案例汇总
- ✅ 案例1:从/etc/passwd提取用户名
- ✅ 案例2:提取 HTTP 请求状态码(access.log)
- ✅ 案例3:提取邮件地址中的域名部分
- 九、常见问题与解决方法
- 十、总结对比表:cut 常用参数一览
- 十一、结语
在 Linux/Unix 系统中,cut 是一个非常实用的文本处理命令,用于从文件或标准输入中提取特定列的内容。它特别适用于处理结构化文本数据,例如 CSV 文件、日志文件、配置文件等。
无论是做数据分析、系统监控,还是编写自动化脚本,cut 都是一个不可或缺的工具。
本文将带你全面了解 cut 工具的使用方式,包括:
✅ cut 的基本语法与常用参数
✅ 如何按字符、字节、字段进行提取
✅ cut 在 Shell 脚本中的实战应用
✅ 与其他文本处理命令的联合使用
✅ 实际开发中的常见问题与优化建议
并通过完整的代码示例帮助你快速上手并熟练掌握 cut 的各种高级用法。
cut 是一个用于 切割文本列 的命令行工具,它可以按照指定的分隔符或固定位置提取数据。
cut 是一个用于 切割文本列 的命令行工具,它可以按照指定的分隔符或固定位置提取数据。
| 场景 | 示例 |
|---|---|
| 提取用户名 | 从 /etc/passwd 提取用户列表 |
| 日志分析 | 提取访问日志中的 IP 地址、请求路径 |
| 数据清洗 | 从 CSV 文件中提取某几列数据 |
| 自动化脚本 | 快速提取变量值、过滤冗余信息 |
cut [选项] 文件名
| 参数 | 描述 |
|---|---|
| -b | 按字节提取(byte-based) |
| -c | 按字符提取(character-based) |
| -f | 按字段提取(field-based),默认以制表符 t 分隔 |
| -d | 指定字段分隔符(delimiter) |
| –output-delimiter=STR | 设置输出时使用的分隔符 |
| -s | 不输出没有分隔符的行(静默模式) |
echo "Hello World" | cut -c1-5
输出:
Hello
💡 -c1-5 表示提取第 1 到第 5 个字符。
假设有一个 CSV 文件 data.csv 内容如下:
name,age,city Alice,28,Beijing Bob,32,Shanghai Charlie,25,Guangzhou
提取第二列(年龄):
cut -d',' -f2 data.csv
输出:
age
28
32
25
cut -d',' -f1,3 data.csv --output-delimiter=' | '
输出:
name | city
Alice | Beijing
Bob | Shanghai
Charlie | Guangzhou
echo "This line has no delimiter" > test.txt
echo "name:age:city" >> test.txt
cut -d':' -f1 -s test.txt
输出:
name
💡 只输出包含分隔符 : 的行。
ip=$(hostname -I | cut -d' ' -f1)
echo "当前主机IP为:$ip"
假设 config.env 内容如下:
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
提取所有键名:
grep '=' config.env | cut -d'=' -f1
输出:
DB_HOST
DB_PORT
DB_USER
lscpu | grep 'Model name' | cut -d':' -f2 | sed 's/^ *//;s/ *$//'
输出类似:
Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
cat access.log | cut -d'"' -f2 | cut -d' ' -f2 | sort | uniq
输出访问过的唯一 URL。
输出访问过的唯一 URL。
grep 'GET /index.html' access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr | head -n 10
输出访问 /index.html 最频繁的前 10 个 IP。
输出访问 /index.html 最频繁的前 10 个 IP。
| 技巧 | 说明 |
|---|---|
| ✅ 使用 -f 提取字段 | 适用于 CSV、TSV 等格式的数据 |
| ✅ 使用 -d 自定义分隔符 | 支持任意字符作为分隔符 |
| ✅ 使用 -c 提取固定位置字符 | 适用于格式固定的文本 |
| ✅ 使用 -b 提取字节范围 | 处理非 UTF-8 编码文件时有用 |
| ✅ 使用 –output-delimiter 修改输出格式 | 控制输出样式更灵活 |
| ✅ 结合 grep 过滤后再提取 | 减少无效数据干扰 |
| ✅ 与 sort、uniq、awk 联合使用 | 实现复杂文本处理逻辑 |
cut -d':' -f1 /etc/passwd
输出系统中所有用户名。
cut -d'"' -f3 access.log | cut -d' ' -f2
提取每次请求的状态码(如 200、404)。
echo "user@example.com" | cut -d'@' -f2
输出:
example.com
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 无法提取正确字段 | 分隔符设置错误 | 检查 -d 参数是否匹配实际分隔符 |
| 输出为空 | 字段索引超出范围 | 使用 -f1-3 或检查字段是否存在 |
| 多个空格导致误判 | 分隔符不统一 | 使用 tr 或 awk 预处理 |
| 输出中文乱码 | 编码不一致 | 使用 iconv 转换编码或检查终端设置 |
| cut 不支持正则表达式 | 功能有限 | 使用 awk 或 perl 替代 |
| 参数 | 功能 |
|---|---|
| -b | 按字节提取 |
| -c | 按字符提取 |
| -f | 按字段提取 |
| -d | 自定义字段分隔符 |
| –output-delimiter | 设置输出分隔符 |
| -s | 静默模式,仅输出有效行 |
到此这篇关于Shell脚本中cut工具的实现的文章就介绍到这了,更多相关Shell cut内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- 详解Shell cut用法
- shell字符截取命令之cut命令的实例详解
- 一天一个shell命令 linux文本内容操作系列-cut命令详解