当前位置: 首页 > news >正文

命令行文本处理小工具:cut、sort、uniq、tr 详解与应用

文章目录

  • 前言
    • 一、cut —— 精准提取所需字段
      • 🔹 常用选项
      • 🔸 示例用法
    • 二、sort —— 让文本有序排列
      • 🔹 常用选项
      • 🔸 示例用法
    • 三、uniq —— 去除连续重复行
      • 🔹 常用选项
      • 🔸 示例用法
    • 四、tr —— 字符转换与处理
      • 🔹 常用选项
      • 🔸 示例用法
    • 五、实战组合:常见面试题解析
      • 1. 统计当前主机的 TCP 连接数(按IP)
      • 2. 查看系统登录用户(去重)
      • 3. 查看所有曾登录系统的用户
    • 六、总结口诀与使用场景
    • 结语

前言

在日常的 Linux 系统管理和数据处理中,我们经常需要快速提取、排序、去重或替换文本内容。虽然强大的脚本语言(如 awk、sed)能处理复杂任务,但在很多简单场景中,几个小巧而高效的命令组合起来就足以胜任。cutsortuniqtr 正是这样一组经典的文本处理工具,它们被称为“命令行文本处理四剑客”。本文将系统介绍这四大工具的常见用法和典型组合,助你提升 shell 工作效率。


一、cut —— 精准提取所需字段

cut 命令主要用于按列或字符截取文本内容,特别适用于处理具有固定分隔符的结构化数据。

🔹 常用选项

  • -b:按字节截取
  • -c:按字符截取(推荐用于中文)
  • -d:指定分隔符(默认为 TAB)
  • -f:指定要提取的字段(需与 -d 搭配使用)

🔸 示例用法

cut -d':' -f1 /etc/passwd        # 提取用户名(第1列)
cut -d':' -f3 /etc/passwd        # 提取UID(第3列)
cut -c2 name.txt                 # 提取每行第2个字符
who | cut -b 3                   # 提取 who 输出每行的第3个字节

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

💡 注意:cut 最适合处理以单个字符作为分隔符的文本,例如 /etc/passwd、CSV 文件等。


二、sort —— 让文本有序排列

sort 用于对文本行进行排序,支持按字符串、数值、指定列等多种方式排序,并具备去重功能。

🔹 常用选项

  • -t:指定分隔符
  • -k:指定排序的列
  • -n:按数值大小排序(默认按字典序)
  • -r:降序排列
  • -u:去除重复行(相当于 sort | uniq
  • -o:将结果输出到文件

🔸 示例用法

sort passwd.txt                         # 按行首字符升序排列
sort -n -t: -k3 passwd.txt              # 按第3列(UID)数值升序
sort -nr -t: -k3 passwd.txt -o out.txt  # 按UID降序并保存结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


三、uniq —— 去除连续重复行

uniq 用于去除相邻的重复行,通常与 sort 命令结合使用以实现全局去重。

🔹 常用选项

  • -c:统计每行重复出现的次数
  • -d:仅显示重复的行
  • -u:仅显示不重复的行

🔸 示例用法

uniq fruit.txt                      # 去除相邻重复行
sort fruit.txt | uniq               # 全局去重
sort fruit.txt | uniq -c            # 统计各行出现次数
last | awk '{print $1}' | sort | uniq  # 查看所有登录过的用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、tr —— 字符转换与处理

tr(translate)主要用于字符替换、删除或压缩重复字符,处理对象是字符而非字段。

🔹 常用选项

  • -d:删除指定字符
  • -s:压缩连续重复的字符(只保留一个)

🔸 示例用法

tr 'a-z' 'A-Z' < fruit.tx # 将所有小写字母转为大写
tr -d 'a' < fruit.txt    # 删除所有字母 'a'
tr -s '\n' < demo       # 压缩连续换行符(多个换行为一个)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


五、实战组合:常见面试题解析

1. 统计当前主机的 TCP 连接数(按IP)

ss -nt | tr -s " " | cut -d " " -f5 | cut -d: -f1 | sort | uniq -c
  • ss -nt:列出所有 TCP 连接
  • tr -s " ":压缩多余空格
  • cut -d " " -f5:提取第五列(IP:端口)
  • cut -d: -f1:提取 IP 地址
  • sort | uniq -c:排序并统计每个 IP 的出现次数
    在这里插入图片描述

2. 查看系统登录用户(去重)

who | awk '{print $1}' | uniq

在这里插入图片描述

3. 查看所有曾登录系统的用户

last | awk '{print $1}' | sort | uniq | grep -vE "(^$|wtmp)"

在这里插入图片描述


六、总结口诀与使用场景

命令核心功能典型应用场景
cut按列或字符截取提取日志特定字段、解析结构化数据
sort排序(支持多种规则)排序数据、去重前预处理
uniq去除相邻重复行统计出现次数、提取唯一值
tr字符替换、删除、压缩大小写转换、删除特殊字符

记忆口诀
“cut 截列,sort 排序,uniq 去重(需配 sort),tr 换删压缩。”


结语

cutsortuniqtr 虽然功能简单,但通过灵活组合,它们能解决许多日常文本处理问题。熟练掌握这些命令,不仅能提高命令行操作效率,也是理解 Linux 哲学“组合小工具完成大任务”的经典实践。希望本文能帮助你更好地使用这些工具,如有疑问或补充,欢迎留言讨论。


相关标签#Linux命令 #文本处理 #Shell编程 #运维工具


文章转载自:

http://oEfQyUsC.kyfrL.cn
http://zz8GEYxC.kyfrL.cn
http://eO1JQGz6.kyfrL.cn
http://wXekQLpQ.kyfrL.cn
http://1IN8VXus.kyfrL.cn
http://DMrHDG2S.kyfrL.cn
http://siQnlbPY.kyfrL.cn
http://NHRUgalv.kyfrL.cn
http://mhFmZmim.kyfrL.cn
http://fQksMFIR.kyfrL.cn
http://3ElbvcLk.kyfrL.cn
http://lrOOWKTh.kyfrL.cn
http://ZzXcC26D.kyfrL.cn
http://PxEUQoTt.kyfrL.cn
http://F3xG6xis.kyfrL.cn
http://cBpbxPLv.kyfrL.cn
http://odbzHOqc.kyfrL.cn
http://Pievl420.kyfrL.cn
http://4UrhU9WN.kyfrL.cn
http://4stRdeNt.kyfrL.cn
http://dwLLPLoQ.kyfrL.cn
http://xCYWzkSa.kyfrL.cn
http://zg824ESt.kyfrL.cn
http://aeRkAA02.kyfrL.cn
http://qdjMcRrt.kyfrL.cn
http://6xRXA96y.kyfrL.cn
http://FKglPyrI.kyfrL.cn
http://YxUanA4q.kyfrL.cn
http://KIRUjuCI.kyfrL.cn
http://sBuMpDfE.kyfrL.cn
http://www.dtcms.com/a/363686.html

相关文章:

  • 从零开始的python学习——函数(2)
  • shell复习(2)
  • Flutter环境搭建全攻略之-windows环境搭建
  • 毫米波雷达信号处理步骤顺序
  • 树莓派网页监控
  • [嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_用Qt编译Windows-Opencv库
  • LangGraph 重要注意事项和常见问题
  • MTK Linux DRM分析(二十六)- MTK mtk_drm_ddp_xxx.c
  • 如何创建逻辑卷
  • Shell脚本入门:从零到精通
  • 容器设备映射配置在海外云服务器GPU加速环境的实施规范
  • QML的focus与activeFocus
  • C++ 左值引用与右值引用介绍
  • MySQL数据库精研之旅第十五期:索引的 “潜规则”(下)
  • OpenCV Python
  • 0825-0829 | 大模型方向周报:多模态模型研究、训练与优化策略、安全与对齐等方向
  • SQL Server--提取性能最差的查询
  • 阿里云国际代理商:如何重置阿里云服务器密码?
  • 阿里云日志服务之WebTracking 小程序端 JavaScript SDK (阿里SDK埋点和原生uni.request请求冲突问题)
  • 现代CPU设计哲学——加载/存储(Load-Store)架构
  • 作为软件专业学生,我眼中新架构实践的‘稳’与‘进’
  • NLP学习系列 | Transformer代码简单实现
  • MySQL 事务隔离与 MVCC
  • 鸿蒙权限崩溃?一招解决闪退难题
  • 自建局域网gitlab如何修改提交时间
  • 365 天技术创作手记:从一行代码到四万同行者的相遇
  • 基本IP保护 Swagger UI 的中间件
  • Flutter doctor
  • 试用Augment编写python脚本实现智能家居3D环境交互响应
  • Vite + React + Tailwind v4 正确配置指南(避免掉进 v3 的老坑)