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

命令行小工具

命令行小工具详解:cut、sort、uniq、tr 及其实用组合

    • 前言
    • 一、 cut —— 按列或字符截取
      • 常用选项
      • 实际应用示例
        • 1.1. **提取用户信息**:
        • 1.2. **字符级截取**:
      • 使用注意
    • 二、sort —— 排序工具
      • 实际应用示例
        • 2.1. **基础排序**:
      • 使用技巧
    • 三、uniq —— 去除重复行
      • 常用选项
      • 实际应用示例
        • 3.1. **基础去重**:
        • 3.2. **组合使用**:
        • 3.3. **实际案例**:
      • 使用注意
    • 四、tr —— 字符转换与处理
      • 常用选项
      • 实际应用示例
        • 4.1. **字符转换**:
        • 4.2. **字符替换**:
        • 4.3. **字符删除与压缩**:
      • 使用技巧
    • 五、常见组合应用案例
      • ① 统计当前连接的主机数
      • ② 统计当前主机的连接状
      • ③ 查看当前登录用户
      • ④ 查看登录过系统的用户
    • 6. 总结口诀
    • 结语

前言

  在日常的系统管理和文本处理工作中,我们经常需要对文本数据进行各种操作,如截取特定列、排序、去重或字符替换等。Linux/Unix 系统提供了一系列强大的命令行工具来帮助我们高效完成这些任务。本文将详细介绍四个最常用的文本处理工具:cutsortuniqtr,并通过丰富的示例展示它们的实际应用场景。这些工具虽然简单,但组合使用时能解决许多复杂的数据处理问题,是每个系统管理员和开发者必备的技能。

一、 cut —— 按列或字符截取

  cut 命令是专门用于从文本中提取特定列或字符的工具,特别适合处理结构化文本数据(如以特定分隔符分隔的字段)。

常用选项

选项含义
-b按字节截取
-c按字符截取(处理中文时推荐使用)
-d指定分隔符(默认为制表符 TAB)
-f指定要提取的字段(需要配合 -d 使用)

实际应用示例

1.1. 提取用户信息
   # 提取/etc/passwd文件中的用户名(第1列)cut -d':' -f1 /etc/passwd# 提取用户ID(第3列)cut -d':' -f3 /etc/passwd# 同时提取用户名和用户IDcut -d':' -f1,3 /etc/passwd

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

1.2. 字符级截取
   # 提取who命令输出的第3个字节who | cut -b 3# 提取name.txt文件的第2个字符(适合中文)cut -c 2 name.txt# 使用 cut -c 2 可以准确提取中文字符

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

使用注意

cut 特别适合处理以单个字符为间隔的文本数据,对于复杂的字段结构可能需要结合其他工具使用。

二、sort —— 排序工具

sort 命令用于对文本行进行排序,默认按行首字符的字典序升序排列,但提供了丰富的选项来满足各种排序需求。

选项含义
-t指定字段分隔符
-k指定排序的字段
-n按数值大小排序(而非字典序)
-r降序排列
-u去除重复行(等同于 uniq
-o将排序结果输出到指定文件

实际应用示例

2.1. 基础排序
# 按默认顺序排序文件内容
sort passwd.txt
```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/501688c75cf442f99b997a8832e5795c.png)
#### 2.2. **高级排序**:
```bash
# 以冒号分隔,按第3列数值升序排序
sort -n -t: -k3 passwd.txt
# 按第3列数值降序排序
sort -nr -t: -k3 passwd.txt
# 排序并去重
sort -u passwd.txt
# 排序结果保存到文件
sort -nr -t: -k3 passwd.txt -o out.txt

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

使用技巧

通过 -t-k 选项的组合,可以灵活地按照文本的特定部分进行排序,这在处理日志文件或数据记录时特别有用。

三、uniq —— 去除重复行

uniq 命令用于去除连续的重复行,通常需要与 sort 命令配合使用才能实现全局去重。

常用选项

选项含义
-c统计每行出现的次数
-d只显示重复的行
-u只显示唯一的行

实际应用示例

3.1. 基础去重
   # 去除相邻的重复行uniq fruit.txt

在这里插入图片描述

3.2. 组合使用
   # 全局去重(先排序再去重)sort fruit.txt | uniq# 统计每行出现次数sort fruit.txt | uniq -c# 只显示重复行sort fruit.txt | uniq -d# 只显示唯一行sort fruit.txt | uniq -u

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

3.3. 实际案例
   # 查看当前登录用户(去重)who | awk '{print $1}' | uniq# 查看登录过系统的所有用户(去重)last | awk '{print $1}' | sort | uniq | grep -v "^$" | grep -v wtmp

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

使用注意

uniq 只能去除相邻的重复行,因此通常需要先使用 sort 进行排序,然后再使用 uniq 去重。

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

tr 命令用于对字符进行转换、删除或压缩,主要处理单个字符,不适合字段级别的操作。

常用选项

选项含义
-d删除指定的字符
-s压缩重复的字符(只保留一个)

实际应用示例

4.1. 字符转换
   # 将小写字母转换为大写字母tr 'a-z' 'A-Z' < fruit.txt# 或者cat fruit.txt | tr 'a-z' 'A-Z'

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

4.2. 字符替换
   # 替换单个字符cat fruit | tr 'a' ' '# 多个字符替换(一一对应)cat fruit | tr 'apple' 'star'

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

4.3. 字符删除与压缩
   # 删除所有'a'字符tr 'a' '/' < fruit.txttr -d 'a' < fruit.txt# 删除所有换行符tr -d '\n' < fruit.txt# 压缩连续的相同字符tr -s 'p' < fruit.txt

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

使用技巧

tr 非常适合进行简单的字符级文本处理,如大小写转换、特殊字符删除等操作。

五、常见组合应用案例

这些工具经常组合使用来解决实际问题,以下是几个典型的组合应用场景:

① 统计当前连接的主机数

ss -nt | tr -s " " | cut -d " " -f5 | cut -d ":" -f1 | sort | uniq -c

在这里插入图片描述
步骤解析

  1. ss -nt:查看TCP连接
  2. tr -s " ":压缩多个空格为单个空格
  3. cut -d " " -f5:提取第5列(对端地址:端口)
  4. cut -d ":" -f1:提取IP地址部分
  5. sort:排序使相同IP相邻
  6. uniq -c:统计每个IP的出现次数

② 统计当前主机的连接状

ss -nta | grep -v '^State' | cut -d" " -f1 | sort | uniq -c

③ 查看当前登录用户

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

④ 查看登录过系统的用户

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

6. 总结口诀

为了便于记忆这些工具的主要功能,可以使用以下口诀:

  • cut —— 截列(提取特定列或字符)
  • sort —— 排序(对文本行进行排序)
  • uniq —— 去重(去除相邻重复行,常与sort配合)
  • tr —— 替换 / 删除 / 压缩(字符级处理)

结语

  掌握这些基础的命令行文本处理工具,可以极大地提高我们在Linux/Unix环境下的工作效率。cutsortuniqtr 虽然各自功能单一,但通过灵活组合,能够解决各种复杂的数据处理问题。无论是系统管理、日志分析还是日常文本处理,这些工具都是不可或缺的利器。
  建议读者通过实际操作来熟悉这些工具的使用,尝试对不同的文本数据应用各种选项组合,逐步掌握它们的强大功能。记住,熟能生巧,只有通过不断的实践,才能真正将这些工具内化为自己的技能。

http://www.xdnf.cn/news/19881.html

相关文章:

  • Controller返回CompletableFuture到底是怎么样的
  • Ubuntu系统镜像源配置
  • 数据结构——树(03二叉树,与路径有关的问题,代码练习)
  • SPI片选踩坑实录(硬件片选和软件片选)
  • Base64编码的作用与应用场景
  • 利用 Java 爬虫获取淘宝商品 SKU 详细信息实战指南
  • 美团龙猫(longcat.AI)编写的利用二分查找优化Excel的sheet.xml指定范围输出C程序
  • 【数学建模学习笔记】时间序列分析:ARIMA
  • Scikit-learn从入门到实践:Scikit-learn入门-安装与基础操作
  • Qwen3-Reranker-0.6B 模型结构
  • Shell脚本一键监控平台到期时间并钉钉告警推送指定人
  • 自动化基本技术原理
  • 嵌入式解谜日志-网络编程
  • Kafka面试精讲 Day 5:Broker集群管理与协调机制
  • 基于SQLite的智能图片压缩存储系统:代码解析与实战应用
  • QuickUp-Ubuntu
  • FPGA AD7606串行驱动与并行驱动
  • 【Flask + Vue3 前后端分离管理系统】
  • 友思特案例 | 食品行业视觉检测案例集锦(三)
  • 利用 Python 获取微店商品关键词搜索 API 接口数据的实战指南
  • 利用飞算Java打造电商系统核心功能模块的设计与实现
  • 硬件开发(1)—单片机(1)
  • atomic常用类方法
  • VR智慧楼宇技术:打造智能办公空间的卓越方案​
  • 深圳外贸峰会究竟藏着啥秘密?能让外贸人收获满满?
  • RHEL9源码编译MySQL8.0.40
  • 图像加密安全传输--设备端视频流加密,手机端视频流解密,使用ChaCha20-Poly1305 进行系统分析
  • 爬虫-----最全的爬虫库介绍(一篇文章让你成为爬虫大佬,爬你想爬)
  • windows系统离线安装Ollama、创建模型(不使用docker)、coze调用
  • Linux为什么不是RTOS