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

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

文章目录

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


前言

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

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


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

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

1. 常用选项

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

2. 示例

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

在这里插入图片描述

who | cut -b 3   #按字节截取第三个字符

在这里插入图片描述

who | cut -c 3 #按字符截取

在这里插入图片描述

cat name | cut -b 2
cat name | cut -c 2   #中文字符截取

在这里插入图片描述

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


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

1. 常用选项

常用 sort 命令选项

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

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

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

语法:uniq [选项] 参数

1. 常用选项

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

2. 示例

# 创建一个水果类型的文件,一共9行内容实例
cat fruit.txt 
apple
apple
peache
pear
banana
cherry
cherry
banana
orangeuniq  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
uniq  fruit.txt                      # 去掉相邻重复行

在这里插入图片描述

sort fruit.txt | uniq                # 全局去重

在这里插入图片描述

sort fruit.txt | uniq -c             # 统计每行出现次数

在这里插入图片描述

sort fruit.txt | uniq -d             # 只显示重复行

在这里插入图片描述

sort fruit.txt | uniq -u             # 只显示不重复行

在这里插入图片描述

实战:查看登录用户

#### 示例一
who | awk '{print $1}'| uniq

在这里插入图片描述

#### 示例二:查看登陆过系统的用户

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. 示例

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. 统计当前连接的主机数

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. 统计当前主机的连接状态

ss -nta | grep -v '^State' | cut -d" " -f1 | sort | uniq -c

在这里插入图片描述

3. 查看当前登录用户

who | awk '{print $1}' | uniq

在这里插入图片描述

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

last | awk '{print $1}' | sort | uniq | grep -v "^$" | grep -v wtmp

在这里插入图片描述


六、总结口诀

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97839.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux开发必备:Git版本控制与GDB调试全指南

前言&#xff1a;在Linux开发流程中&#xff0c;版本控制与程序调试是保障项目稳定性和开发效率的两大核心环节。Git作为当前最主流的分布式版本控制系统&#xff0c;能高效管理代码迭代、追踪修改记录并支持多人协同开发&#xff1b;GDB&#xff08;GNU调试器&#xff09;是Li…

实现 TypeScript 内置工具类型(源码解析与实现)

目标读者&#xff1a;已经熟悉 TypeScript 基础语法、泛型、条件类型的同学。本文按常见工具类型的分类与顺序实现并解释 Partial、Required、Readonly、Pick、Omit、Record、Exclude、Extract、NonNullable、ReturnType、Parameters、ConstructorParameters、InstanceType、Th…

Spring Boot + Nacos 配置中心示例工程

1️⃣ 工程结构 nacos-demo├── pom.xml└── src├── main│ ├── java│ │ └── com.example.nacosdemo│ │ ├── NacosDemoApplication.java│ │ ├── config│ │ │ └── AppProperties.java│ │ └── cont…

(二)文件管理-基础命令-pwd命令的使用

文章目录1. 命令格式2. 基本用法3. 高级用法4. 注意事项1. 命令格式 pwd [OPTION]...[OPTION]: 可选选项&#xff0c;用于改变命令的默认行为。最主要的两个选项是 -L 和 -P。它不需要任何参数&#xff08;如文件名或目录名&#xff09; 2. 基本用法 用法&#xff1a;pwd 是…

Leetcode_202.快乐数_三种方法解决(普通方法解决,哈希表解决,循环链表的性质解决_快慢指针)

目录第一种方法&#xff1a;暴力解法暴力ac代码&#xff1a;第二种方法&#xff1a;哈希表哈希表ac代码:第三种方法&#xff1a;根据循环链表的性质(快慢指针)第一种方法&#xff1a;暴力解法 最暴力的思路就是直接使用循环往下一直计算&#xff0c;这样特别浪费时间&#xff…

代码随想录刷题Day48

这次博客主要是对做过的关于二叉树系列的题目进行整理和分类。二叉树&#xff0c;要处理整个树&#xff0c;一般少不了遍历。遍历主要可以分为&#xff1a;递归系列、层序遍历。如果不遍历的话&#xff0c;那就是处理特殊的树了&#xff0c;比如完全二叉树。递归系列基本的递归…

汽车工装结构件3D扫描尺寸测量公差比对-中科米堆CASAIM

汽车制造过程中&#xff0c;工装结构件的尺寸精度对整车装配质量和生产进度有重要影响。传统测量工具如卡尺和三坐标测量机采用接触式工作方式&#xff0c;检测过程耗时较长&#xff0c;对于具有复杂曲面特征的工件&#xff0c;难以全面获取尺寸数据。激光三维扫描技术改变了传…

Docker Pull 代理配置方法

本文介绍通过网络代理加速Docker镜像拉取的方法。 配置方法 当执行docker pull从Docker Hub 拉取镜像时&#xff0c;其网络连接由守护进程docker daemon进行维护。 要修改其代理设置&#xff0c;可配置其systemd服务&#xff0c;步骤如下&#xff1a; &#xff08;1&#xf…

机电装置:从基础原理到前沿应用的全方位解析

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 1 机电装置的基本概念与发展历程 机电装置&#xff08;Mechatronic D…

《SVA断言系统学习之路》【03】关于布尔表达式

序列中使用的表达式基于其所含变量的采样值进行评估。表达式评估的结果为布尔值&#xff0c;其解释方式与过程性if语句条件中的表达式完全相同&#xff1a;若表达式计算结果为X、Z 或 0&#xff0c;则被解释为假&#xff1b;否则即为真。但是&#xff0c;对可出现在并发断言中的…

指针高级(2)

6.数组指针#include <stdio.h> int main() {/*练习&#xff1a;利用指针遍历数组*///1.定义数组int arr[] { 10,20,30,40,50 };int len sizeof(arr) / sizeof(int);//2.获取数组的指针//实际上获取的&#xff1a;数组的首地址int* p1 arr;int* p2 &arr[0];printf…

如何高效记单词之:抓住首字母——以find、fund、fond、font为例

find、fund、fond、font这几个单词&#xff0c;你都认识吗&#xff1f;这几个单词&#xff0c;意思大体如下&#xff1a; find v.找到&#xff1b;发现fund n.基金fond a.喜欢的&#xff1b;喜爱的&#xff1b;深情的font n.字体&#xff0c;字型&#xff0c;字形 这几个单词在…

Ubuntu下把 SD 卡格式化为 FAT32

在 Ubuntu 下把 SD 卡格式化为 FAT32&#xff0c;按下面做&#xff08;会抹掉整卡数据⚠️&#xff09;&#xff1a; 1) 找到你的 SD 卡设备名 lsblk -p记下整盘设备&#xff0c;比如 /dev/sdb&#xff08;USB 读卡器常见&#xff09;或 /dev/mmcblk0&#xff08;内置读卡器&am…

涉私数据安全与可控匿名化利用机制研究(上)

文章目录前言一、涉私数据的概述及分类&#xff08;一&#xff09;涉私数据的“知情同意原则”&#xff08;二&#xff09;涉私数据的分类二、涉私数据可控匿名化利用机制&#xff08;一&#xff09;数据产品与涉私数据的利用形式&#xff08;二&#xff09;通过可信数据空间受…

Redis 的跳跃表:像商场多层导航系统一样的有序结构

目录 一 、从 "超市货架" 的痛点看跳跃表的价值 1.1、跳跃表与商场导航系统的结构对应 1. 1.1、zskiplistNode&#xff1a;带导航标记的 "商品"&#xff08;跳跃表节点&#xff09; 1.1.1.1、level []&#xff1a;商品上的多层导航标记 1.1.1.2、back…

小程序点击之数据绑定

<return /><view class"all-wrap" style"padding-top:{{topHeight}}px;"><view class"my-title">我的收藏</view><scroll-viewclass"collect-list-container"scroll-yscroll-top"{{scrollTop}}"…

数据结构——顺序表和单向链表(2)

目录 前言 一、单向链表 1、基本概念 2、单向链表的设计 &#xff08;1&#xff09;节点设计 &#xff08;2&#xff09;初始化空单向链表 &#xff08;3&#xff09;、初始化数据节点 &#xff08;4&#xff09;数据节点 &#xff08;5&#xff09;判断链表是否为空 …

More Effective C++ 条款26:限制某个类所能产生的对象数量

More Effective C 条款26&#xff1a;限制某个类所能产生的对象数量核心思想&#xff1a;通过控制类的实例化过程&#xff0c;限制程序中该类的对象数量&#xff0c;可以防止资源过度使用&#xff0c;确保系统资源合理分配&#xff0c;并实现单例或有限实例模式。 &#x1f680…

CMS系统维护中常见的安全威胁及防护指南!

内容管理系统&#xff08;CMS&#xff09;已成为网站建设的核心工具&#xff0c;但随之而来的安全风险却常被低估。超过70%的网站使用CMS构建&#xff0c;而其中近半数曾遭遇安全漏洞威胁。作为运维人员和开发者&#xff0c;了解这些安全威胁并采取相应防护措施至关重要。 一、…

springboot knife4j 接口文档入门与实战

Spring Boot3 Knife4j 项目地址https://gitee.com/supervol/loong-springboot-study&#xff08;记得给个start&#xff0c;感谢&#xff09;Knife4j 介绍在国内 Java 开发领域&#xff0c;Knife4j 是一款广受欢迎的 API 文档工具&#xff0c;它基于 OpenAPI 规范&#xff0c;在…