cut 是 Linux/Unix 系统中一个用于按列提取文本内容的命令,常用于处理结构化文本(如 CSV、日志、配置文件等)。它通过分隔符、字符位置或字节位置来切割文本,提取指定部分。
核心功能
-  按字段(列)提取:用分隔符(如逗号、冒号)将文本分割成多列,提取指定列。 
-  按字符位置提取:直接根据字符的位置提取内容(如第 1-5 个字符)。 
-  按字节提取:类似字符位置,但按字节处理(对 ASCII 文本效果相同,但对多字节字符需谨慎)。 
常用参数
| 参数 | 作用 | 示例 | 
|---|---|---|
| -d | 指定字段分隔符(默认是制表符) | -d ','用逗号分隔 | 
| -f | 选择指定字段(列) | -f 1,3提取第 1 和 3 列 | 
| -c | 按字符位置提取 | -c 1-5提取第 1 到 5 个字符 | 
| -b | 按字节位置提取 | -b 2-4提取第 2 到 4 个字节 | 
| --complement | 反向选择(提取未指定的部分) | -f 2 --complement提取除第 2 列外的所有内容 | 
使用示例
1. 按分隔符提取字段
假设文件 data.csv 内容为:
Name,Age,City
Alice,25,Beijing
Bob,30,Shanghai-  提取第 1 列(姓名): cut -d ',' -f 1 data.csvName Alice Bob
-  提取第 2 和 3 列(年龄和城市): cut -d ',' -f 2,3 data.csv输出: Age,City 25,Beijing 30,Shanghai
2. 按字符位置提取
假设文件 text.txt 内容为:
ABCDEFGHIJKLMN-  提取第 3 到 6 个字符: cut -c 3-6 text.txtCDEF
3. 处理系统文件
-  提取 /etc/passwd中的用户名(第 1 列,冒号分隔):cut -d ':' -f 1 /etc/passwd输出: root daemon bin ...(系统用户列表)
注意事项
-  分隔符与字段: -  默认分隔符是制表符,需用 -d指定其他字符(如-d ':')。
-  如果字段包含分隔符本身(如 "Hello,World"),cut无法直接处理,需改用awk或手动处理。
 
-  
-  多字节字符问题: -  -c按字符位置切割,适用于 UTF-8 文本。
-  -b按字节切割,处理非 ASCII 字符(如中文)时可能截断乱码。
 
-  
-  与 awk的区别:-  cut更简单高效,适合固定分隔符的简单场景。
-  awk支持正则表达式分隔符、复杂逻辑,适合灵活处理文本。
 
-  
经典组合用法
-  提取日志中的时间戳(假设时间在第 1-15 个字符): cat app.log | cut -c 1-15
-  提取 IP 地址(假设 IP 是第 2 列,空格分隔): echo "192.168.1.1 404 GET /api" | cut -d ' ' -f 1
-  反向提取(排除第 2 列): cut -d ',' -f 2 --complement data.csv
总结
cut 是一个轻量级文本处理工具,适合快速提取结构化数据的特定部分。对于复杂需求(如动态分隔符、条件判断),建议使用 awk 或 sed。