cut命令用于linux中按列或字符截取文件内容:-f配合-d按分隔符提取字段(如cut -d':' -f1,7),-c按字符位置截取(如cut -c1-10);处理空格分隔需谨慎,推荐先用tr规范化。

Linux 截取文件中的特定列内容,主要靠 cut 命令,它专为字段(列)提取设计,简单高效。如果数据有明确分隔符(如冒号、逗号、空格或制表符),cut 是首选;若需结合条件筛选或更复杂逻辑,则可搭配 awk。
用 -f 按字段提取(最常用)
-f 选项指定要输出的列号,必须配合 -d 指定分隔符(否则默认用 Tab)。
例如 /etc/passwd 以冒号 : 分隔,提取用户名(第1列)和登录 shell(第7列):
cut -d ':' -f 1,7 /etc/passwd
输出类似:
root:/bin/bash daemon:/usr/sbin/nologin
- 列号支持多种写法:
1(单列)、2-4(第2到第4列)、1,3,5(不连续列)、3-(从第3列到行尾) - 注意:列号从 1 开始,不是 0
用 -c 按字符位置截取(无视分隔符)
适合固定宽度格式,比如日志开头的时间戳、对齐的表格等。
例如提取每行前 10 个字符(常用于截取时间部分):
cut -c 1-10 access.log
其他常用写法:
-
cut -c 5-:从第 5 个字符到行尾 -
cut -c 3,7,12:提取第 3、7、12 个字符 -
cut -c -8:提取前 8 个字符
⚠️ 注意:-c 对多字节字符(如中文 UTF-8)按字节计数,可能截断乱码;此时建议用 awk 或 sed 替代。
处理空格分隔的文件(需谨慎)
cut 默认只认 Tab,不擅长处理空格分隔的数据(尤其字段内含空格时)。
若强行用空格分隔,可用:
cut -d ' ' -f 2,4 file.txt
但更稳妥的做法是先用 tr 或 awk 规范化空格(如把多个空格转为单 Tab):
tr -s ' ' '\t' <h3>结合其他命令灵活使用</h3><p><code>cut</code> 常与管道配合,实现“先过滤再取列”或“取列后再筛选”: </p>
- 先查出含关键词的行,再取列:
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1,6
- 取列后进一步筛选(如只保留非空结果):
cut -d ',' -f 2 data.csv | grep -v '^$'
不复杂但容易忽略











