本文目录导读:

在Shell脚本(特别是Bash)中,cut 命令是一个非常常用的文本处理工具,主要用于从文件的每一行中截取指定字段或字符。
以下是 cut 截取字段的主要用法,按分隔方式分类:
按字符位置截取 (-c)
这是最基础的用法,按字符的绝对位置(从1开始计数)进行切割。
- 语法:
cut -c [位置] - 示例:
echo "Hello World" | cut -c 1-5 # 输出:Hello (第1到第5个字符) echo "Hello World" | cut -c 7-11 # 输出:World (第7到第11个字符) echo "Hello World" | cut -c 1,3,5 # 输出:Hlo (第1、3、5个字符) echo "Hello World" | cut -c 3- # 输出:llo World (第3个字符到末尾) echo "Hello World" | cut -c -5 # 输出:Hello (从开头到第5个字符)
按字节数截取 (-b)
功能与 -c 类似,但按字节计数,对于纯英文文本,-c 和 -b 结果相同;对于包含中文字符的文本(UTF-8下每个汉字占3字节),使用 -b 要注意乱码。
- 语法:
cut -b [位置] - 示例:
echo "abc123" | cut -b 1-3 # 输出:abc
按分隔符截取字段 (-d 和 -f) —— 最常用
这是脚本中最强大的用法,用于处理结构化文本(如CSV、日志、/etc/passwd)。
-
语法:
cut -d '分隔符' -f [字段编号] -
参数:
-d:指定字段分隔符(默认是Tab键\t)。-f:指定要提取的字段列表。
-
示例:
# 1. 提取 /etc/passwd 中的用户名(以冒号分隔,第1列) cut -d ':' -f 1 /etc/passwd # 2. 提取日志中的IP和时间(空格分隔) echo "192.168.1.1 - - [10/Oct/2023] GET /index.html" | cut -d ' ' -f 1,4 # 输出:192.168.1.1 [10/Oct/2023] # 3. 提取CSV的第2和第4列(逗号分隔) echo "ID,Name,Age,City" | cut -d ',' -f 2,4 # 输出:Name,City # 4. 提取第3个字段及其之后的所有字段 echo "a|b|c|d|e" | cut -d '|' -f 3- # 输出:c|d|e # 5. 指定补集(不显示第2个字段) echo "a b c d" | cut -d ' ' -f 1,3- # 等效于 --complement -f2 # 输出(假设用空格分隔):a c d
常用选项组合与技巧
a. 处理非固定分隔符(多空格)
cut 无法像 awk 那样自动处理多个连续空格,如果需要处理这种场景,可以先用 tr 压缩空格:
echo "John Doe 30" | tr -s ' ' | cut -d ' ' -f 2 # 输出:Doe
b. 排除指定字段 (--complement)
-b, -c, -f 都可与此选项搭配,表示“显示除了指定字段以外的内容”。
echo "1:2:3:4:5" | cut -d ':' -f 1,2 --complement # 输出:3:4:5 (即排除了第1、2列)
c. 处理没有分隔符的行
如果某行没有指定的分隔符,cut 默认会输出整行,可以用 -s 选项禁止输出:
echo -e "hello:world\nno_sep_line" | cut -d ':' -f 1 -s # 输出:hello (第二行没有冒号,被忽略)
cut 与 awk 的对比
| 特性 | cut |
awk |
|---|---|---|
| 分隔符 | 只能指定 单个 固定字符 | 支持 正则表达式 (如多个空格) |
| 性能 | 非常快(适合简单提取) | 较慢(但功能强大) |
| 字段处理 | 只能提取,不能修改/新增 | 可重新排列、格式化、计算 |
| 多空格 | 需要 tr -s 配合 |
默认 awk 忽略多个空格 |
| 字符截取 | -c 非常直接 |
需用 substr() 函数 |
选择建议:
- 简单的列提取(定界符明确) → 用
cut(更快、语法更简洁) - 需要处理复杂分隔符、计算、条件过滤 → 用
awk
脚本中的实际应用示例
#!/bin/bash # 1. 读取 /etc/passwd 检查用户 shell USERS=$(cut -d: -f1,7 /etc/passwd) echo "用户及其Shell:" echo "$USERS" # 2. 从日志提取每秒的请求数量 cat access.log | cut -d ' ' -f 4 | tr -d '[' | sort | uniq -c # 3. 只显示非注释的配置文件内容(去掉注释行) grep -v '^#' config.conf | cut -d '=' -f 1 # 只提取变量名 # 4. 提取网卡IP(ifconfig 示例) ifconfig eth0 | grep "inet " | cut -d ' ' -f 12 | cut -d ':' -f 2
cut 的核心三要素
-c(字符):处理固定宽度文本(如日志头部、密码字段)。-b(字节):处理二进制或按字节对齐的数据。-d+-f(分隔符+字段):处理结构化文本的标准化操作(如CSV、配置文件)。
常见坑点:
- 默认分隔符是 Tab,处理空格时务必指定
-d ' '。 - 字段编号从 1 开始。
- 不支持正则表达式作为分隔符(如需,用
awk或sed)。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播