命令行文本处理小工具:cut、sort、uniq、tr 详解与应用
文章目录
- 前言
- 一、cut —— 精准提取所需字段
- 🔹 常用选项
- 🔸 示例用法
- 二、sort —— 让文本有序排列
- 🔹 常用选项
- 🔸 示例用法
- 三、uniq —— 去除连续重复行
- 🔹 常用选项
- 🔸 示例用法
- 四、tr —— 字符转换与处理
- 🔹 常用选项
- 🔸 示例用法
- 五、实战组合:常见面试题解析
- 1. 统计当前主机的 TCP 连接数(按IP)
- 2. 查看系统登录用户(去重)
- 3. 查看所有曾登录系统的用户
- 六、总结口诀与使用场景
- 结语
前言
在日常的 Linux 系统管理和数据处理中,我们经常需要快速提取、排序、去重或替换文本内容。虽然强大的脚本语言(如 awk、sed)能处理复杂任务,但在很多简单场景中,几个小巧而高效的命令组合起来就足以胜任。cut
、sort
、uniq
和 tr
正是这样一组经典的文本处理工具,它们被称为“命令行文本处理四剑客”。本文将系统介绍这四大工具的常见用法和典型组合,助你提升 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 换删压缩。”
结语
cut
、sort
、uniq
和 tr
虽然功能简单,但通过灵活组合,它们能解决许多日常文本处理问题。熟练掌握这些命令,不仅能提高命令行操作效率,也是理解 Linux 哲学“组合小工具完成大任务”的经典实践。希望本文能帮助你更好地使用这些工具,如有疑问或补充,欢迎留言讨论。
相关标签:#Linux命令
#文本处理
#Shell编程
#运维工具