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

Linux文本处理工具

文章目录

  • Linux 文本处理四剑客:cut、sort、uniq、tr 实用指南
    • 1. cut —— 按列或字符截取
      • 常用选项
      • 示例
      • 字节与字符的区别
    • 2. sort —— 文本排序工具
      • 常用选项
      • 示例
    • 3. uniq —— 去除连续重复行
      • 常用选项
      • 示例
      • 实战应用:查看登录用户
    • 4. tr —— 字符转换工具
      • 基本语法
      • 常用选项
      • 示例
    • 5. 组合命令实战
      • ① 统计当前连接的主机数
      • ② 统计当前主机的连接状态
      • ③ 查看当前登录用户
      • ④ 查看登录过系统的用户
    • 6. 总结口诀

Linux 文本处理四剑客:cut、sort、uniq、tr 实用指南

在 Linux 系统管理和文本处理中,cutsortuniqtr 是四个非常实用的命令行工具。它们各自有着独特的功能,又能灵活组合,轻松应对各种文本处理场景。本文将详细介绍这四个命令的用法和实战技巧。

1. cut —— 按列或字符截取

cut 命令主要用于从文本中抽取需要的字段,特别适合处理结构化的文本数据。

常用选项

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

示例

# 从/etc/passwd文件中截取第1列(用户名)
cut -d':' -f1 /etc/passwd       

在这里插入图片描述

# 截取第3列(UID)
cut -d':' -f3 /etc/passwd       
# 同时截取第1和3列
cut -d':' -f1,3 /etc/passwd     

# 截取每行的第2个字符
cut -c 2 name.txt               

在这里插入图片描述

字节与字符的区别

处理英文时,-b-c 效果通常一致,但处理多字节字符(如中文)时差异明显:

who | cut -b 3   # 按字节截取,可能导致中文乱码
who | cut -c 3   # 按字符截取,适合中文# 处理中文示例
cat name | cut -b 2  # 可能只截取了中文字符的一半字节
cat name | cut -c 2  # 正确截取第二个字符(无论是中文还是英文)

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

注意:cut 只擅长处理以单个字符作为分隔符的文本。

2. sort —— 文本排序工具

sort 命令用于对文本内容进行排序,默认按行首字符升序排列。

常用选项

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

示例

# 按默认方式(第一列升序)排序passwd.txt
sort passwd.txt                      # 以冒号为分隔符,按第3列数值升序排序
sort -n -t: -k3 passwd.txt           # 以冒号为分隔符,按第3列数值降序排序
sort -nr -t: -k3 passwd.txt          # 排序并去除重复行
sort -u passwd.txt                   # 排序结果保存到out.txt文件
sort -nr -t: -k3 passwd.txt -o out.txt 

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

3. uniq —— 去除连续重复行

uniq 命令用于处理重复行,但只能去掉相邻的重复行,因此通常与 sort 配合使用以实现全局去重。

常用选项

  • -c:对重复的行进行计数
  • -d:只显示重复行
  • -u:只显示不重复的行

示例

假设我们有一个 fruit.txt 文件,内容如下:

apple
apple
peache
pear
banana
cherry
cherry
banana
orange
# 去掉相邻的重复行
uniq fruit.txt                     # 先排序使重复行相邻,再去重(全局去重)
sort fruit.txt | uniq               # 统计每行出现的次数
sort fruit.txt | uniq -c             # 统计每行出现次数# 只显示重复行
sort fruit.txt | uniq -d             # 只显示重复行# 只显示不重复的行
sort fruit.txt | uniq -u             # 只显示不重复行
# 也可以这样写
cat fruit.txt | sort | uniq -u

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

实战应用:查看登录用户

# 查看当前登录的用户(去重)
who | awk '{print $1}'| uniq# 查看曾经登录过系统的用户
last | awk '{print $1}' | sort | uniq | grep -v "^$" | grep -v wtmp

在这里插入图片描述

4. tr —— 字符转换工具

tr 命令主要用于字符级别的处理,包括替换、删除和压缩重复字符等操作,不适合字段级别的处理。

基本语法

tr [选项]... SET1 [SET2]

从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

常用选项

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

示例

# 将fruit.txt中的小写字母转换为大写
tr 'a-z' 'A-Z' < fruit.txt          
# 或者
cat fruit.txt | tr 'a-z' 'A-Z'# 字符替换是一一对应的
cat fruit | tr 'apple' 'APPLE'      # 将所有'a'替换为空格
cat fruit | tr 'a' ' '              # 替换规则:a→s,p→a,l→r,e→r
cat fruit | tr 'apple' 'star'       # 将所有'a'替换为'/'
tr 'a' '/' < fruit.txt              # 删除所有'a'字符
tr -d 'a' < fruit.txt               # 删除所有换行符
tr -d '\n' < fruit.txt              # 将连续的'p'压缩成一个
tr -s 'p' < fruit.txt               

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

5. 组合命令实战

这些命令单独使用时已经很强大,组合起来更是能解决复杂的文本处理问题。

① 统计当前连接的主机数

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

命令解析:

  • ss -nt:查看 TCP 连接,不解析服务名
    • -n:不解析服务名,直接显示端口号
    • -t:只显示 TCP 连接
  • tr -s " ":将多个空格压缩成一个,方便后续处理
  • cut -d " " -f5:以空格为分隔符,取第 5 列(对端地址:端口)
  • cut -d ":" -f1:以冒号为分隔符,取第 1 段(仅保留 IP 地址)
  • sort:排序,使相同的 IP 地址连续排列
  • 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 系统下处理文本数据的效率,无论是日常管理还是数据分析都能游刃有余。

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

相关文章:

  • 机器算法(五)模型选择与调优
  • 基于SpringBoot的广科大在线图书管理系统设计与实现(代码+数据库+LW)
  • 探索JavaScript机器学习:几款流行的库推荐
  • Leetcode 3670. Maximum Product of Two Integers With No Common Bits
  • HTML第四课:个人简介页面开发
  • 下载速度爆表,全平台通用,免费拿走!
  • DaemonSet Job CronJob 概念理解
  • XML在线格式化 - 加菲工具
  • Leetcode二分查找(3)
  • 移动硬盘删除东西后,没有释放空间
  • 【机器学习入门】5.2 回归的起源——从身高遗传到线性模型的百年演变
  • 狄利克雷分布作用
  • CentOS 创建站点
  • 二进制流进行预览pdf、excel、docx
  • Cisco FMC利用sftp Server拷贝文件方法
  • 0902 C++类的匿名对象
  • 面试问题:c++的内存管理方式,delete的使用,vector的resize和reverse,容量拓展
  • uni-app 布局之 Flex
  • 基于STM32与华为云联动的智能电动车充电桩管理系统
  • QSlider 和 QProgressBar 的区别与实践
  • 【Linux基础】Linux系统启动:深入解析Linux系统启动完整流程
  • 仿真波导中超短脉冲传输中的各种非线性效应所产生的超连续谱
  • AI如何理解PDF中的表格和图片?
  • qt安装FFmpeg后编译遇到error: collect2.exe: error: ld returned 1 exit status错误
  • 链表题类型注解解惑:理解Optional,理解ListNode
  • 数据结构--跳表(Skip List)
  • 【学Python自动化】 7. Python 输入与输出学习笔记
  • kaggle中的2D目标检测训练trick总结
  • 用了企业微信 AI 半年,这 5 个功能让我彻底告别重复劳动
  • 一文带你入门 AT 指令集:从串口通信到模块控制