当前位置: 首页 > 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://www.xdnf.cn/news/1435537.html

相关文章:

  • EMQX 4.4 加mysql认证
  • BandiZip下载与详细图文安装教程!!
  • docker 安装 redis 并设置 volumes 并修改 修改密码(二)
  • 构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式
  • C++算法学习:位运算
  • ECMWF数据批量下载(Windows版本)
  • Ngene:实验设计的尖端利器
  • 洛谷P3811 【模板】模意义下的乘法逆元
  • Linux操作系统(6)
  • java-设计模式-3-创建型模式-原型
  • 一文读懂 Python 【循环语句】:从基础到实战,效率提升指南
  • 【机器学习学习笔记】Matplotlib 基本操作
  • Java 大视界 --Java 大数据在智能教育学习资源整合与知识图谱构建中的深度应用(406)
  • 如何将大疆无人机拍摄到的图像回传到应急指挥中心大屏?5G单兵图传轻松解决图传问题|伟博视讯
  • Ansible角色:高效开发与管理的秘密
  • Ukey介绍
  • HTML第二课:块级元素
  • 【3D 入门-3】常见 3D 格式对比,.glb / .obj / .stl / .ply
  • Ascend上开发自定义算子接入PyTorch有几种实现方式?
  • Higress云原生API网关详解 与 Linux版本安装指南
  • 企业数字安全守护神:IT运维管理系统全面解析,构建坚不可摧的防护体系
  • 实现自己的AI视频监控系统-第三章-信息的推送与共享3(重点)
  • 数据结构:闭散列 (Closed Hashing)-开放定址法 (Open Addressing)
  • react用useImages读取图片,方便backgroundImage
  • hikvision海康威视sdk调用失败,code为29解决办法
  • 集采与反腐双重压力下,医药销售的破局之道:从资源依赖到价值重构
  • 从结构化到多模态:RAG文档解析工具选型全指南
  • Portainer:Docker可视化管理神器部署与使用攻略
  • 不只是一台玩具车:开源燃料电池机器人HydroBot全揭秘
  • 怎么用redis lua脚本实现各分布式锁?Redisson各分布式锁怎么实现的?