Linux cut命令是系统中用于文本截取的核心工具之一,它可以从文件的每一行中截取指定的部分并输出,常用于快速提取日志、配置文件的特定字段,在shell脚本自动化处理中应用十分广泛。

cut命令基本语法
cut命令的基础语法格式如下:
cut [参数] [文件]
如果不指定文件,cut命令会默认从标准输入读取内容进行处理。
常用参数说明
cut命令的核心参数主要分为三类,分别对应不同的截取规则,具体说明如下:
| 参数 | 含义 |
|---|---|
| -b | 按字节截取指定内容 |
| -c | 按字符截取指定内容 |
| -f | 按字段(列)截取指定内容 |
| -d | 指定字段分隔符,默认分隔符为制表符,需要和-f参数配合使用 |
| -s | 不输出不包含分隔符的行 |
| --complement | 截取指定范围之外的内容 |
按字节截取(-b参数)
按字节截取适合处理纯英文文本,每个英文字符、数字、符号通常占1个字节,中文在UTF-8编码下占3个字节,所以处理中文文本不推荐用-b参数。
示例1:截取文件每行的第1到第3个字节
# 假设test.txt内容为hello world cut -b 1-3 test.txt # 输出结果:hel
示例2:截取第1个和第5个字节
cut -b 1,5 test.txt # 输出结果:hl
按字符截取(-c参数)
-c参数按字符截取,不管字符是英文还是中文,每个字符都算作一个单位,更适合处理包含中文的文本。
示例:截取每行的前2个字符
# 假设test.txt内容为你好世界abc cut -c 1-2 test.txt # 输出结果:你好
按字段截取(-f参数)
按字段截取是cut命令最常用的场景,通常配合-d参数指定分隔符,用来提取表格类文本的特定列。
示例1:提取/etc/passwd文件中的用户名(第一列,分隔符为冒号)
cut -d: -f1 /etc/passwd # 输出结果会列出系统中所有用户名
示例2:提取多列内容,比如提取用户名和家目录(第一列和第六列)
cut -d: -f1,6 /etc/passwd
示例3:使用--complement参数截取排除指定列之外的内容,比如排除第一列,输出其他所有列
cut -d: -f1 --complement /etc/passwd
标准输入配合使用
cut命令可以配合管道接收其他命令的输出作为输入,实现链式处理。
示例:查看当前系统所有用户的shell类型
cat /etc/passwd | cut -d: -f7
使用注意事项
- cut命令的分隔符只能指定单个字符,如果需要按多个字符或者正则表达式分隔,建议使用awk命令替代。
- 处理中文文本时优先使用-c参数,避免用-b参数导致截取乱码。
- 如果行内没有指定的分隔符,-f参数默认会输出整行内容,加上-s参数可以过滤掉这些行。
简单实战案例
假设我们有一个学生成绩文件score.txt,内容如下,分隔符为逗号:
张三,85,90,88 李四,78,92,85 王五,90,88,92
需求:提取所有学生的姓名和总分(前三门成绩之和)
首先用cut提取姓名和三门成绩:
cut -d, -f1-3 score.txt
如果需要计算总分,可以结合awk进一步处理,cut负责提取字段,awk负责计算,两者配合完成复杂需求。