cut

cut命令用于从文件或输入流中提取指定列或字段,是Linux文本处理的重要工具。

基本语法

cut [选项] [文件...]

主要选项

字符位置选项

  • -c LIST - 按字符位置提取
  • -b LIST - 按字节位置提取
  • -f LIST - 按字段提取(需要指定分隔符)

分隔符选项

  • -d DELIM - 指定字段分隔符(默认是Tab)
  • -s - 只显示包含分隔符的行
  • --output-delimiter=STRING - 指定输出分隔符

其他选项

  • --complement - 输出互补的字符/字段
  • -n - 不分割多字节字符
  • --help - 显示帮助信息

位置指定格式

  • N - 第N个字符/字段
  • N- - 从第N个到末尾
  • N-M - 从第N个到第M个
  • -M - 从开头到第M个
  • N,M - 第N个和第M个

使用示例

按字符位置提取

# 提取第1-3个字符
echo "hello world" | cut -c 1-3
# 输出: hel

# 提取第5个字符到末尾
echo "hello world" | cut -c 5-
# 输出:  world

# 提取第1,3,5个字符
echo "hello world" | cut -c 1,3,5
# 输出: hlo

按字段提取

# 提取第2个字段(默认Tab分隔)
echo -e "name\tage\tcity" | cut -f 2
# 输出: age

# 以逗号为分隔符,提取第1,3字段
echo "name,age,city,country" | cut -d ',' -f 1,3
# 输出: name,city

# 提取/etc/passwd中的用户名和shell
cut -d ':' -f 1,7 /etc/passwd
# 输出: root:/bin/bash

处理CSV文件

# 从CSV文件提取指定列
cut -d ',' -f 2,4 data.csv

# 提取第2列到最后一列
cut -d ',' -f 2- data.csv

# 只显示包含逗号的行
cut -d ',' -s -f 1 data.csv

组合使用示例

# 显示系统中所有用户的用户名
cut -d ':' -f 1 /etc/passwd | sort

# 提取IP地址的前三段
echo "192.168.1.100" | cut -d '.' -f 1-3
# 输出: 192.168.1

# 从ps命令输出中提取进程ID
ps aux | tail -n +2 | cut -c 10-15

# 提取文件的扩展名
echo "document.txt" | cut -d '.' -f 2
# 输出: txt

与其他命令结合

# 统计每个用户的shell使用情况
cut -d ':' -f 7 /etc/passwd | sort | uniq -c

# 从日志文件中提取时间戳
cut -d ' ' -f 1-3 /var/log/messages

# 提取网络接口名称
ip addr | grep '^[0-9]' | cut -d ':' -f 2 | cut -d ' ' -f 2

# 从df命令输出提取文件系统使用率
df -h | tail -n +2 | cut -c 35-38

实际应用场景

日志分析

# 从Apache日志中提取IP地址
cut -d ' ' -f 1 /var/log/apache2/access.log

# 提取HTTP状态码
cut -d '"' -f 3 /var/log/apache2/access.log | cut -d ' ' -f 2

# 统计访问最多的IP
cut -d ' ' -f 1 /var/log/apache2/access.log | sort | uniq -c | sort -nr

系统管理

# 列出所有系统用户
cut -d ':' -f 1 /etc/passwd | head -20

# 查看用户的默认shell
cut -d ':' -f 1,7 /etc/passwd | grep bash

# 提取挂载点信息
cut -d ' ' -f 3 /proc/mounts | sort | uniq

数据处理

# 处理CSV数据,提取特定列
cut -d ',' -f 2,5,8 sales_data.csv > extracted_data.csv

# 从配置文件中提取键值
cut -d '=' -f 1 /etc/config.conf  # 提取键名
cut -d '=' -f 2 /etc/config.conf  # 提取值

常用技巧

1. 处理复杂分隔符

# 处理多个空格作为分隔符的情况
echo "name    age    city" | tr -s ' ' | cut -d ' ' -f 2

# 处理制表符和空格混合
cat file | tr '\t' ' ' | cut -d ' ' -f 1

2. 反向选择

# 排除第2列,显示其他所有列
cut --complement -f 2 data.csv

# 排除第1-3字符,显示其余字符
echo "hello world" | cut --complement -c 1-3

3. 处理包含分隔符的字段

# 当字段本身包含分隔符时,使用引号处理
cut -d '"' -f 2,4,6 data.csv  # 提取引号内的内容

注意事项

  1. 字符编码: 处理非ASCII字符时注意使用-n选项
  2. 分隔符: 默认分隔符是Tab,不是空格
  3. 空行处理: cut命令会保留空行
  4. 字段编号: 字段编号从1开始,不是0
  5. 性能: 处理大文件时,cut比awk更快

相关命令

  • awk - 更强大的文本处理工具
  • sed - 流编辑器
  • tr - 字符转换
  • sort - 排序
  • uniq - 去重

cut命令是Linux文本处理的基础工具,掌握其用法对日常运维工作非常重要。

powered by Gitbook© 2025 编外计划 | 最后修改: 2025-07-28 12:42:41

results matching ""

    No results matching ""