1 分钟阅读 次阅读

cut 是 Linux/Unix 系统中的一个文本处理命令,用于从文件或标准输入中提取文本的特定部分(如列、字段、字符范围)。它类似于在表格中“剪切”出指定的列。

一、基本语法

cut [选项] [文件]
  • 若不指定文件,则从标准输入读取数据
  • 常与管道(|)结合使用

二、主要选项

选项 说明 示例
-d 指定字段分隔符(默认是制表符) -d','
-f 选择字段(列) -f1,3
-c 选择字符位置 -c1-5
-b 选择字节位置 -b2-4

三、常用用法示例

1. 按字段提取(适合CSV、日志等结构化文本)

# 提取第一列(默认制表符分隔)
cut -f1 data.txt

# 使用逗号分隔,提取第1和第3列
cut -d',' -f1,3 file.csv

# 提取第2列到最后一列
cut -d' ' -f2- log.txt

2. 按字符位置提取

# 提取每行的前5个字符
cut -c1-5 text.txt

# 提取第3、5、7个字符
cut -c3,5,7 text.txt

3. 组合使用示例

# 提取/etc/passwd的用户名(第一列,冒号分隔)
cut -d':' -f1 /etc/passwd

# 提取ps输出中的进程ID(通常为第2列)
ps aux | cut -d' ' -f2

四、实用技巧

1. 排除特定字段

# 提取除第3列外的所有列(需要结合其他命令)
cut -d',' -f3 --complement data.csv

注意:并非所有系统都支持 --complement 选项

2. 处理固定宽度数据

# 提取第1-10、20-30字符
cut -c1-10,20-30 fixed_width.txt

3. 与管道配合

# 统计不同用户的数量
cut -d':' -f1 /etc/passwd | sort | uniq -c

# 提取IP地址(假设在第5列,空格分隔)
netstat -an | cut -d' ' -f5

五、注意事项

  1. 分隔符问题
    • 默认分隔符是制表符,不是空格
    • 连续分隔符可能被合并(如需保留用awk
  2. 中文字符
    • -c 按字符计数,适合多字节字符
    • -b 按字节计数,可能切碎中文字符
  3. 常见替代: 当需要更复杂处理时,可考虑:
    awk    # 更强大的字段处理
    sed    # 流编辑器
    grep   # 模式匹配
    

六、经典用例

# 1. 获取当前目录下文件名(去掉路径)
ls /path/to/*.txt | cut -d'/' -f4

# 2. 解析日期字符串
echo "2023-12-25" | cut -d'-' -f2  # 输出"12"

# 3. 提取用户名和家目录
cut -d: -f1,6 /etc/passwd

# 4. 获取网络设备IP
ifconfig eth0 | grep 'inet ' | cut -d' ' -f10

补充:cut vs awk 简单对比

| 特性 | cut | awk | |——|—–|—–| | 分隔符 | 单字符 | 正则表达式 | | 字段计算 | 不支持 | 支持(如$NF) | | 条件过滤 | 不支持 | 支持 | | 输出格式 | 原始顺序 | 可重新排列 | | 适合场景 | 简单提取 | 复杂处理 |

留下评论