Shell脚本中cut工具的实现

 更新时间:2025年08月11日 09:59:28   作者:咖啡の猫  
本文主要介绍了Shell脚本中cut工具的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言

在 Linux/Unix 系统中,cut 是一个非常实用的文本处理命令,用于从文件或标准输入中提取特定列的内容。它特别适用于处理结构化文本数据,例如 CSV 文件、日志文件、配置文件等。

无论是做数据分析、系统监控,还是编写自动化脚本,cut 都是一个不可或缺的工具。

本文将带你全面了解 cut 工具的使用方式,包括:

cut 的基本语法与常用参数
✅ 如何按字符、字节、字段进行提取
cut 在 Shell 脚本中的实战应用
✅ 与其他文本处理命令的联合使用
✅ 实际开发中的常见问题与优化建议

并通过完整的代码示例帮助你快速上手并熟练掌握 cut 的各种高级用法。

二、什么是 cut?

cut 是一个用于 切割文本列 的命令行工具,它可以按照指定的分隔符或固定位置提取数据。

✅ 典型用途包括:

场景示例
提取用户名从 /etc/passwd 提取用户列表
日志分析提取访问日志中的 IP 地址、请求路径
数据清洗从 CSV 文件中提取某几列数据
自动化脚本快速提取变量值、过滤冗余信息

三、cut 基础语法

cut [选项] 文件名

✅ 常用选项说明:

参数描述
-b按字节提取(byte-based)
-c按字符提取(character-based)
-f按字段提取(field-based),默认以制表符 \t 分隔
-d指定字段分隔符(delimiter)
--output-delimiter=STR设置输出时使用的分隔符
-s不输出没有分隔符的行(静默模式)

四、cut 使用示例

✅ 示例1:按字符提取(-c)

echo "Hello World" | cut -c1-5

输出:

Hello

💡 -c1-5 表示提取第 1 到第 5 个字符。

✅ 示例2:按字段提取(-f+-d)

假设有一个 CSV 文件 data.csv 内容如下:

name,age,city
Alice,28,Beijing
Bob,32,Shanghai
Charlie,25,Guangzhou

提取第二列(年龄):

cut -d',' -f2 data.csv

输出:

age
28
32
25

✅ 示例3:修改输出分隔符(--output-delimiter)

cut -d',' -f1,3 data.csv --output-delimiter=' | '

输出:

name | city
Alice | Beijing
Bob | Shanghai
Charlie | Guangzhou

✅ 示例4:只提取有分隔符的行(-s)

echo "This line has no delimiter" > test.txt
echo "name:age:city" >> test.txt

cut -d':' -f1 -s test.txt

输出:

name

💡 只输出包含分隔符 : 的行。

五、cut 在 Shell 脚本中的应用

✅ 示例1:提取 IP 地址(结合hostname)

ip=$(hostname -I | cut -d' ' -f1)
echo "当前主机IP为:$ip"

✅ 示例2:解析环境变量配置文件

假设 config.env 内容如下:

DB_HOST=localhost
DB_PORT=3306
DB_USER=root

提取所有键名:

grep '=' config.env | cut -d'=' -f1

输出:

DB_HOST
DB_PORT
DB_USER

✅ 示例3:获取 CPU 型号名称(结合lscpu)

lscpu | grep 'Model name' | cut -d':' -f2 | sed 's/^ *//;s/ *$//'

输出类似:

Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz

六、cut 与其他命令的配合使用

✅ 示例1:提取日志中的 URL 并排序去重(cut+sort+uniq)

cat access.log | cut -d'"' -f2 | cut -d' ' -f2 | sort | uniq

输出访问过的唯一 URL。

✅ 示例2:统计访问次数最多的 IP(cut+grep+awk)

grep 'GET /index.html' access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr | head -n 10

输出访问 /index.html 最频繁的前 10 个 IP。

七、cut 使用技巧总结

技巧说明
✅ 使用 -f 提取字段适用于 CSV、TSV 等格式的数据
✅ 使用 -d 自定义分隔符支持任意字符作为分隔符
✅ 使用 -c 提取固定位置字符适用于格式固定的文本
✅ 使用 -b 提取字节范围处理非 UTF-8 编码文件时有用
✅ 使用 --output-delimiter 修改输出格式控制输出样式更灵活
✅ 结合 grep 过滤后再提取减少无效数据干扰
✅ 与 sort、uniq、awk 联合使用实现复杂文本处理逻辑

八、cut 实战案例汇总

✅ 案例1:从/etc/passwd提取用户名

cut -d':' -f1 /etc/passwd

输出系统中所有用户名。

✅ 案例2:提取 HTTP 请求状态码(access.log)

cut -d'"' -f3 access.log | cut -d' ' -f2

提取每次请求的状态码(如 200、404)。

✅ 案例3:提取邮件地址中的域名部分

echo "user@example.com" | cut -d'@' -f2

输出:

example.com

九、常见问题与解决方法

问题原因解决方案
无法提取正确字段分隔符设置错误检查 -d 参数是否匹配实际分隔符
输出为空字段索引超出范围使用 -f1-3 或检查字段是否存在
多个空格导致误判分隔符不统一使用 tr 或 awk 预处理
输出中文乱码编码不一致使用 iconv 转换编码或检查终端设置
cut 不支持正则表达式功能有限使用 awk 或 perl 替代

十、总结对比表:cut 常用参数一览

参数功能
-b按字节提取
-c按字符提取
-f按字段提取
-d自定义字段分隔符
--output-delimiter设置输出分隔符
-s静默模式,仅输出有效行

十一、结语

到此这篇关于Shell脚本中cut工具的实现的文章就介绍到这了,更多相关Shell cut内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux中10个方便的Bash别名

    Linux中10个方便的Bash别名

    今天小编就为大家分享一篇关于Linux中10个方便的Bash别名,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-09-09
  • Shell脚本中获取进程ID的方法

    Shell脚本中获取进程ID的方法

    这篇文章主要介绍了Shell脚本中获取进程ID的方法,我想要知道运行中脚本子shell的进程id,我该如何在shell脚本中得到PID,阅读本文即可找到你想要答案,需要的朋友可以参考下
    2015-03-03
  • linux awk时间计算脚本及awk命令详解

    linux awk时间计算脚本及awk命令详解

    这篇文章主要介绍了linux awk时间计算脚本及awk命令详解的相关资料,需要的朋友可以参考下
    2015-11-11
  • Linux下有名管道mkfifo使用详解

    Linux下有名管道mkfifo使用详解

    有名管道用于非亲缘关系进程之间的通讯,创建有名管道使用到的库函数是mkfifo(),这里强调是库函数的原因是,mkfifo同时也是一个用户指令,这篇文章主要介绍了Linux下有名管道mkfifo使用,需要的朋友可以参考下
    2023-07-07
  • shell脚本5种执行方式及脚本不同的执行方法和区别详解

    shell脚本5种执行方式及脚本不同的执行方法和区别详解

    我们都知道bash shell 脚本的方法有多种,下面这篇文章主要给大家介绍了关于shell脚本5种执行方式及脚本不同的执行方法和区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Linux 中的Logwatch命令

    Linux 中的Logwatch命令

    在Linux系统操作中,logwatch能够对系统log报告进行分析,用于Linux日志的处理,下面小编给大家详细介绍下Linux 中的Logwatch命令,感兴趣的朋友一起看看吧
    2017-09-09
  • Linux中的Syslog命令

    Linux中的Syslog命令

    syslog是Linux系统默认的日志守护进程,默认的syslog配置文件是/etc/syslog.conf文件。接下来通过本文给大家分享Linux中的Syslog命令,感兴趣的朋友一起看看吧
    2017-09-09
  • Linux 中的gunzip命令

    Linux 中的gunzip命令

    gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。下面通过本文给大家分享Linux 中的gunzip命令,一起看看吧
    2017-09-09
  • shell中的source命令的巧妙用法

    shell中的source命令的巧妙用法

    这篇文章主要介绍了shell中的source命令的巧妙用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • CentOS 6.3下给PHP添加mssql扩展模块教程

    CentOS 6.3下给PHP添加mssql扩展模块教程

    这篇文章主要介绍了CentOS 6.3下给PHP添加mssql扩展模块教程,本文使用freetds编译安装实现,需要的朋友可以参考下
    2014-09-09

最新评论