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.csv
Name 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.txt
CDEF
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
。