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

Linux 文本处理四剑客:cut, sort, uniq, tr

1. cut - 按列或字符截取

核心功能:从文本行中提取指定的字段或字符。

选项说明
-d指定分隔符(默认是 TAB)
-f指定要提取的字段(列),需与 -d 连用
-c字符截取(推荐用于中文等多字节字符)
-b字节截取(不推荐用于中文)

示例

# 提取 /etc/passwd 文件中的用户名(第一列)
cut -d':' -f1 /etc/passwd# 提取 UID(第三列)
cut -d':' -f3 /etc/passwd# 同时提取用户名和 UID(第1和3列)
cut -d':' -f1,3 /etc/passwd# 提取每行的第2个字符
cut -c 2 name.txt# 提取每行的第3个字节(对于ASCII字符,结果与-c相同)
who | cut -b 3

⚠️ 重要注意

  • cut 非常适合处理以单一字符(如 :,、空格)分隔的规整文本。

  • 对于不定长空格等复杂分隔,建议使用 awk


2. sort - 排序

核心功能:对文本行进行排序,默认按行首字符的字典序升序排列。

选项说明
-t指定分隔符
-k指定根据哪个字段进行排序
-n数值大小排序(而非字典序)
-r降序排序(Reverse)
-u去重(输出中重复的行只出现一次)
-o将排序结果输出到文件(可覆盖原文件)

示例

# 默认按第一列字典序排序
sort passwd.txt# 按第三列(UID)的数值大小进行升序排序
sort -t':' -k3 -n passwd.txt# 按第三列数值大小进行降序排序
sort -t':' -k3 -nr passwd.txt# 去重
sort -u passwd.txt# 排序并保存结果到 out.txt
sort -nr -t: -k3 passwd.txt -o out.txt

3. uniq - 报告或忽略重复的行

核心功能:用于去除连续的重复行。必须先使用 sort 使所有重复行相邻,才能实现全局去重。

选项说明
-c在每行前加上该行的重复次数
-d仅显示重复过的行(每组重复行只显示一次)
-u仅显示未曾重复的行(唯一行)

示例
假设 fruit.txt 内容如下:

apple
apple
peache
pear
banana
cherry
cherry
banana
orange
# 1. 直接使用uniq:只能去除相邻的重复行
uniq fruit.txt# 2. 全局去重:先排序,让所有重复行相邻
sort fruit.txt | uniq# 3. 统计每行出现的次数(非常常用!)
sort fruit.txt | uniq -c# 4. 只找出重复的水果种类
sort fruit.txt | uniq -d# 5. 只找出独一无二的水果种类
sort fruit.txt | uniq -u

实战示例

# 查看当前所有登录用户(去重)
who | awk '{print $1}' | sort | uniq# 查看历史上所有登录过系统的用户
last | awk '{print $1}' | sort | uniq | grep -vE "(^$|wtmp)"

4. tr - 字符转换、压缩和删除

核心功能:对来自标准输入的字符进行替换删除压缩处理对象是字符,不是字段

选项说明
-d删除字符
-s压缩连续重复的字符,只保留一个

示例

# 将文件中所有小写字母转换为大写
cat fruit.txt | tr 'a-z' 'A-Z'
# 或
tr 'a-z' 'A-Z' < fruit.txt# 字符替换:将所有的 'a' 替换成 '/'
tr 'a' '/' < fruit.txt# 删除所有字母 'a'
tr -d 'a' < fruit.txt# 删除换行符(让多行变一行)
tr -d '\n' < fruit.txt# 压缩连续的空格(常用于规范文本)
echo "Hello    World" | tr -s ' '# 错误示例:tr 是字符一对一映射,不是单词替换
# 这会把 'a','p','l','e' 分别映射为 's','t','a','r',结果会很乱
cat fruit | tr 'apple' 'star'

5. 案例

① 统计当前服务器的网络连接数(按 IP 地址)

ss -nt | tr -s ' ' | cut -d ' ' -f5 | cut -d: -f1 | sort | uniq -c
  • ss -nt:列出所有 TCP 连接(不解析服务名)。

  • tr -s ' ':压缩多个空格为一个,规范输出。

  • cut -d ' ' -f5:提取第五列(远程地址:端口)。

  • cut -d: -f1:提取冒号前的第一部分(IP 地址)。

  • sort:排序,为 uniq 做准备。

  • uniq -c:统计每个 IP 的连接数。

② 统计当前主机的各种 TCP 连接状态数量

ss -nta | grep -v '^State' | cut -d' ' -f1 | sort | uniq -c
  • ss -nta:显示所有 TCP 连接和状态。

  • grep -v '^State':过滤掉标题行。

  • cut -d' ' -f1:提取第一列(状态)。

  • sort | uniq -c:统计每种状态的数量。

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

相关文章:

  • lua脚本在redis中如何单步调试?
  • 一文吃透 deviceQuery:从安装到输出解读,彻底验证服务器 GPU 环境
  • AlDente Pro for Mac电脑 充电限制保护工具
  • Go 面试题:Goroutine 和 GMP 模型解析
  • 最快的 C 语言 JSON 库 - yyjson
  • 阿里云日志服务之WebTracking 小程序端 JavaScript SDK (阿里SDK埋点和原生uni.request请求冲突问题)
  • 2025全球绿色发展与健康生活方式高峰论坛 推动HLCC国际认证体系全球化实施
  • VGG改进(7):基于Spatial Attention的性能优化
  • 跨平台游戏引擎 Axmol-2.8.0 发布
  • Prettier代码格式化工具测评:支持JS/TS/Vue多语言,兼容ESLint实现团队代码格式统一
  • TKDE-2022《Low-Rank Linear Embedding for Robust Clustering》
  • Element-Plus 入门指南
  • 【3D通用视觉框架】基于Qt5开发的3D视觉框架软件,纯底层,全套源码,开箱即用
  • R语言根据经纬度获得对应样本的省份
  • PCB设计规范
  • redis-----java客户端
  • K8s集群+Rancher Server:部署DolphinScheduler 3.2.2集群
  • 【vue2】vue2.7x的项目中集成tailwind.css真的不要太香
  • GPT-5在医疗领域应用的研究效能初探(上)
  • Elasticsearch赋能3D打印机任务统计分析
  • 【图像处理基石】图像预处理方面有哪些经典的算法?
  • 聚铭网络实力蝉联数说安全“2025年中国网络安全市场100强”
  • 【C++游记】红黑树
  • Lombok 实用注解深度解析!
  • 【项目】多模态RAG—本地部署MinerU实现多类文档解析
  • 懒加载详细讲解
  • 使用修改过的arj源码编译和测试
  • C++ 学习与 CLion 使用:(五)数据类型,包括整型、实型、字符型、转义字符、字符串、布尔型
  • 从DevOps到BizDevOps:哪些DevOps工具能够成为业务创新加速引擎?
  • 响应式编程框架Reactor【8】