Linux文本处理工具

发布于:2025-09-03 ⋅ 阅读:(20) ⋅ 点赞:(0)

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 系统下处理文本数据的效率,无论是日常管理还是数据分析都能游刃有余。


网站公告

今日签到

点亮在社区的每一天
去签到