shell中命令小工具:cut、sort、uniq,tr的使用方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
    • [一、cut ------ 按列或字符截取](#一、cut —— 按列或字符截取)
      • [1. 常用选项](#1. 常用选项)
      • [2. 示例](#2. 示例)
    • [二、sort ------ 排序(默认按行首字符升序)](#二、sort —— 排序(默认按行首字符升序))
      • [1. 常用选项](#1. 常用选项)
      • [常用 `sort` 命令选项](#常用 sort 命令选项)
    • [三、uniq ------ 去除 **连续** 重复行](#三、uniq —— 去除 连续 重复行)
    • [四、tr ------ 字符替换 / 删除 / 压缩重复](#四、tr —— 字符替换 / 删除 / 压缩重复)
      • [1. 常用选项](#1. 常用选项)
      • [2. 示例](#2. 示例)
    • 五、常见组合面试题(扩展)
      • [1. 统计当前连接的主机数](#1. 统计当前连接的主机数)
        • [1.1 命令解析](#1.1 命令解析)
      • [2. 统计当前主机的连接状态](#2. 统计当前主机的连接状态)
      • [3. 查看当前登录用户](#3. 查看当前登录用户)
      • [4. 查看登录过系统的用户](#4. 查看登录过系统的用户)
    • 六、总结口诀

前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、cut ------ 按列或字符截取

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

1. 常用选项

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

2. 示例

bash 复制代码
cut -d':' -f1 /etc/passwd        # 截取第1列(用户名)
bash 复制代码
cut -d':' -f3 /etc/passwd        # 截取第3列(UID)
bash 复制代码
cut -d':' -f1,3 /etc/passwd      # 截取第1和3列
bash 复制代码
cut -c 2 name.txt                # 截取第2个字符
bash 复制代码
who
bash 复制代码
who | cut -b 3   #按字节截取第三个字符
bash 复制代码
who | cut -c 3 #按字符截取
bash 复制代码
cat name | cut -b 2
bash 复制代码
cat name | cut -c 2   #中文字符截取

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


二、sort ------ 排序(默认按行首字符升序)

1. 常用选项

常用 sort 命令选项

选项 功能描述
-t 指定字段分隔符(默认为空格或制表符)
-k 指定排序的关键字段(可指定起止列)
-n 按数值大小排序(默认按字典序)
-r 降序排列(默认升序)
-u 去除重复行(类似 uniq 的功能)
-o 将结果输出到指定文件(而非标准输出)

三、uniq ------ 去除 连续 重复行

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

语法:uniq [选项] 参数

1. 常用选项

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

2. 示例

bash 复制代码
# 创建一个水果类型的文件,一共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
bash 复制代码
uniq  fruit.txt                      # 去掉相邻重复行
bash 复制代码
sort fruit.txt | uniq                # 全局去重
bash 复制代码
sort fruit.txt | uniq -c             # 统计每行出现次数
bash 复制代码
sort fruit.txt | uniq -d             # 只显示重复行
bash 复制代码
sort fruit.txt | uniq -u             # 只显示不重复行

实战:查看登录用户

bash 复制代码
#### 示例一
who | awk '{print $1}'| uniq
bash 复制代码
#### 示例二:查看登陆过系统的用户

last | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' | sort | uniq..." | grep -v wtmp


四、tr ------ 字符替换 / 删除 / 压缩重复

主要用于 单个字符处理,不适合字段级别。

语法:tr [选项]... SET1 [SET2]

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

1. 常用选项

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

2. 示例

bash 复制代码
tr 'a-z' 'A-Z' < fruit.txt           # 小写转大写
# 或
cat fruit.txt | tr 'a-z' 'A-Z'
cat fruit | tr 'apple' 'APPLE'       # 替换是一一对应的字母的替换
cat fruit | tr 'a' ' '               # 把替换的字符用单引号引起来,包括特殊字
cat fruit | 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 压缩成一个
示例:




五、常见组合面试题(扩展)

1. 统计当前连接的主机数

bash 复制代码
ss -nt | tr -s " " | cut -d " " -f5 | cut -d ":" -f1 | sort | uniq -c
1.1 命令解析
  • ss -nt:查看 TCP 连接,不解析服务名
  • tr -s " ":压缩多个空格为一个
  • cut -d " " -f5:取第5列(对端地址:端口)
  • cut -d ":" -f1:取 IP 地址部分
  • sort:排序
  • uniq -c:统计重复数量

2. 统计当前主机的连接状态

bash 复制代码
ss -nta | grep -v '^State' | cut -d" " -f1 | sort | uniq -c

3. 查看当前登录用户

bash 复制代码
who | awk '{print $1}' | uniq

4. 查看登录过系统的用户

bash 复制代码
last | awk '{print $1}' | sort | uniq | grep -v "^$" | grep -v wtmp

六、总结口诀

  • cut ------ 截列
  • sort ------ 排序
  • uniq ------ 去重(必须连续,常和 sort 联合)
  • tr ------ 替换 / 删除 / 压缩

相关推荐
摩尔元数7 小时前
产线自动化效率上不去?打破设备和平台的“数据孤岛”是关键!
运维·低代码·自动化·制造·mes
海洋猿7 小时前
nginx配置端口转发(docker-compose方式、包括TCP转发和http转发)
运维·nginx·docker·端口转发
幸运狗头7 小时前
Linux学习-硬件
linux·单片机·学习
人生苦短1287 小时前
k8s常用命令
linux·容器·kubernetes
MoloXuanhe8 小时前
[TryHackMe]Oh My WebServer(nday漏洞+容器逃逸)
运维·网络·tryhackme·thm
ideal树叶8 小时前
Jenkins和Fastlane的原理、优缺点、用法、如何选择
运维·jenkins
潘潘潘潘潘潘潘潘潘潘潘潘9 小时前
【Linux】Linux开发必备:Git版本控制与GDB调试全指南
linux·运维·服务器·git·学习方法
彻骨寒风9 小时前
在麒麟 ARM (aarch64)安装OpenJDK11和elasticsearchkibana
运维·arm开发·jenkins
小生不才yz9 小时前
(二)文件管理-基础命令-ls命令的使用
linux