cut 提取文本分两类:按字符位置(-c)适合固定宽度文本,按分隔符字段(-f)需指定分隔符(-d),默认仅识别 tab;不支持多字符分隔符、引号解析及不规整数据,复杂场景应选 awk 或 sed。

Linux 运维中用 cut 提取文本,关键在分清“按字符位置”和“按分隔符字段”两类场景——前者不依赖分隔符,后者必须明确指定分隔符,且默认只认 Tab,不是空格也不是逗号。
按字段提取(-f):必须配 -d 指定分隔符
绝大多数运维日志、配置文件(如 /etc/passwd、CSV)靠分隔符对齐,cut -f 是主力,但容易因忽略 -d 而失败:
- 处理
/etc/passwd(冒号分隔):cut -d':' -f1,6 /etc/passwd提取用户名和家目录 - 解析空格分隔的
ps输出:ps aux | cut -d' ' -f2,11——但注意:多个连续空格会被当多个字段,结果错位;更稳做法是先用awk或加tr -s ' '压缩空格 - 读取 CSV 文件:
cut -d',' -f2,4 data.csv可取第2、4列;但若某字段含英文逗号(如"a,b",c),cut无法识别引号,此时应换awk -F','或专用 CSV 工具 - 跳过表头再取字段:不能用
cut自己跳行,得组合tail -n +2 file.csv | cut -d',' -f1
按字符位置提取(-c):适合固定宽度日志或对齐文本
当文本没有统一分隔符,但列是严格左对齐(如 ls -l 输出、某些审计日志),就该用 -c 按列宽硬截:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 取
ls -l中权限字段(前10字符):ls -l | cut -c1-10 - 提取每行第15–25个字符:
cut -c15-25 access.log -
-c按 Unicode 字符计数,中文、英文字母都算1个位置,比-b更安全;UTF-8 下用-b可能切碎汉字,除非加-n选项防止跨字节截断
常用组合与避坑要点
实际运维中常需过滤、补全或反向提取:
- 只输出含分隔符的行(过滤脏数据):
cut -d',' -f1 -s data.csv,避免无逗号的空行干扰 - 反向提取(去掉某列):
cut -d':' -f1,3,5 --complement /etc/passwd输出除第1、3、5列外的所有字段 - 更换输出分隔符:
cut -d',' -f1,3 --output-delimiter='|' data.csv把逗号输出改成竖线 - 确认真实分隔符:
cat -A file查看是否为^I(Tab),别凭肉眼判断空格或制表符
什么情况不该用 cut
cut 简单高效,但有硬限制:
- 不支持多字符分隔符(如
-d'::'报错),只能单字符 - 不解析引号包裹的字段(CSV 中
"field,with,comma"会被错误拆开) - 不自动处理字段缺失或对齐错位,遇到不规整数据易出错
- 需要条件判断、正则匹配、跨行处理时,应直接上
awk或sed










