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

Shell文本处理四剑客

目录

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

2. sort —— 排序(默认按行首字符升序)

3. uniq —— 去除 连续 重复

4. tr —— 字符替换 / 删除 / 压缩重复

5. 常见组合面试题 扩展

① 统计当前连接的主机数

② 统计当前主机的连接状态

③ 查看当前登录用户

④ 查看登录过系统的用户

6. 总结口诀


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

常用于从文本中抽取需要的字段。

  • 常用选项

    • -b:按字节截取

    • -c:按字符截取(中文推荐用 -c

    • -d:指定分隔符(默认 TAB)

    • -f:指定字段(需配合 -d

  • 示例

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

cut -d':' -f3 /etc/passwd        # 截取第3列(UID)

cut -d':' -f1,3 /etc/passwd      # 截取第1和3列
cut -c 2 name.txt                # 截取第2个字符

who | cut -b 3 (英语用b)

who | cut -c 3 (中文推荐用c)
cat name | cut -b 2   
cat name | cut -c 2   #中文字符截取

​
注意:cut只擅长于处理单个字符为间隔的文本

2. sort —— 排序(默认按行首字符升序)

  • 常用选项

    • -t:指定分隔符

    • -k:指定排序字段

    • -n:按数值排序(默认是字典序)

    • -r:降序

    • -u:去重(等价于 uniq

    • -o:输出到文件

  • 示例

sort passwd.txt                       # 按第一列升序

sort -n -t: -k3 passwd.txt            # 以冒号分隔,按第3列数值升序

sort -nr -t: -k3 passwd.txt           # 第3列数值降序

sort -u passwd.txt                    # 去重

sort -nr -t: -k3 passwd.txt -o out.txt # 排序结果保存


3. uniq —— 去除 连续 重复

注意:只能去掉相邻的重复行,所以通常先 sortuniq

语法 uniq [选项] 参数

  • 常用选项

    • -c:对重复的行进行计数

    • -d:只显示重复行

    • -u:只显示唯一行

  • 示例

##创建一个水果类型的文件,一共9行内容实例
cat 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 [选项]… SET1 [SET2] 从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

  • 常用选项

    • -d:删除字符

    • -s:压缩重复字符,只保留一个

  • 示例

tr 'a-z' 'A-Z' < fruit.txt           # 小写转大写
或cat fruit.txt | tr 'a-z' 'A-Z'

cat fruit.txt | tr 'apple' 'APPLE'       #替换是一一对应的字母的替换

cat fruit.txt | tr 'a' ' '               #把替换的字符用单引号引起来,包括特殊字

cat fruit.txt | tr 'apple' 'star'        #a替换成s,p替换成a,le替换成r

tr 'a' '/' < fruit.txt               # 替换 a -> /   多个字符替换成一个
​
tr -d 'a' < fruit.txt                # 删除所有 a

tr -d '\n' < fruit.txt               # 删除换行符

tr -s 'p' < fruit.txt                # 连续 p 压缩成一个
​

5. 常见组合面试题 扩展

① 统计当前连接的主机数

ss -nt | tr -s " " | cut -d " " -f5 | cut -d ":" -f1 | sort | uniq -c
=============================================
ss -nt
​ss:查看 socket 连接
​-n:不解析服务名,直接显示端口号(避免 http 变成 80 之类的)
​-t:只显示 TCP 连接tr -s " "
​把多个空格压缩成一个,方便后续 cut。输出变成规则的单空格分隔。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 —— 替换 / 删除 / 压缩

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

相关文章:

  • 在 Qt 的 .pro 文件中设置警告级别和 C++11 标准
  • 宋红康 JVM 笔记 Day10|对象实例化
  • 2025年经济学专业人士证书选择与分析
  • 科技信息差(9.2)
  • =Windows下VSCode配置SSH密钥远程登录
  • BWN-4000指纹采集器技术规格书
  • 四端子电阻有哪些好处?-华年商城
  • WPF依赖属性和依赖属性的包装器:
  • 鸿蒙权限崩溃?一招解决闪退难题
  • 单调栈与单调队列
  • ThinkPHP的log
  • C++二维数组的前缀和
  • 小杰机械视觉(finally)——题库上——gray、thresh、erode、dilate、HSV、开运算、ROI切割、矫正。
  • 博主必备神器~
  • HBase Region
  • 【代码解读】Deepseek_vl2中具体代码调用
  • 一款高效、强大的子域名爬取工具,帮助安全研究者和渗透测试人员快速收集目标域名的子域名信息
  • 服务器数据恢复—OceanStor存储数据丢失原来这样恢复
  • HOW - 在浏览器下载一个 Excel 表格文件
  • 基于SpringBoot的大学生就业招聘系统
  • 撤回通知(我自己的账号)
  • 自建局域网gitlab如何修改提交时间
  • 不做推销做共情:一个小众独立站靠宠物殡葬用品,年营收超3600万元
  • 机器学习笔记-第二周
  • 力扣:2458. 移除子树后的二叉树高度(dfs序)
  • 基于单片机车流车速检测系统设计
  • C++字符串操作:string类与数组对比
  • MySQL知识大全
  • ansible循环+判断(with,loop,when,if,for)
  • Python爬虫进阶:面向对象编程构建可维护的爬虫系统