sort ,uniq ,tr ,cut命令

news2024/12/26 9:32:08

目录

一、sort命令

1.格式

2.命令演示

2.1 选项 -n :按照数字大小排序

 2.2选项 -r :反向排序

 2.3选项 -u:隐藏多余行

2.4选项 -t  :指定分隔符;-k :指定字符;-o :指定保存文件

二、uniq命令

1.语法格式 

2.命令演示

2.1只使用uniq命令只隐藏连续重复的多余行

2.2选项-c :对连续重复行进行计数,并删除重复行

2.3选项 -u :仅显示出现一次的行

2.4选项 -d :仅显示连续重复的行

3.实际应用

3.1将远程破解主机密码的ip进行筛选,将这些ip输入到/etc/host.deny文件中,远程登录密码输入错误的IP地址会记录在 /var/log/secure 日志文件中

3.2利用脚本实现操作

三、tr命令

1.语法格式

2.命令演示

2.1选项 -c :保留字符集1的字符,其他字符用字符集2字符替换

2.2 选项 -d :删除字符集1的字符

2.3选项 -s :将重复字符压缩成一个字符

2.4选项 -s :将字符集2字符替换字符集2的字符

3.用命令对数组中的值进行排序

四、cut命令

1.语法格式

2.命令演示

2.1选项 -f:提取指定字符  ; -d :指定分隔符

2.2选项 --output-delimiter :更改输出内容的分隔符

2.3选项 -complement :输出排除字段


一、sort命令

以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序。

比较原则:从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

1.格式

sort [选项] 参数
一般配合 cat 命令使用
cat file | sort 选项

常用选项:
-n:按照数字进行排序
-r:反向排序
-u:等同于uniq,表示相同的数据仅显示一行
-t:指定字段分隔符,默认使用tab键分隔
-k:指定排序字段
-o <输出文件>:将排序后的结果转存至指定文件
-f:忽略大小写,会将小写字母都转换为大写字母来进行比较
-b:忽略每行前面的空格

2.命令演示

#不加选项排序
sort 123.txt 
1
12
125
13
13
142
153
5
51
61

2.1 选项 -n :按照数字大小排序

sort -n 123.txt 
1
5
12
13
13
51
61
125
142
153

 2.2选项 -r :反向排序

sort -nr 123.txt 
#不加-n,从首字符依次向后比较
153
142
125
61
51
13
13
12
5
1

 2.3选项 -u:隐藏多余行

cat 123.txt 
1
12
5
12
61
61
13
sort -u 123.txt 
#将相同行多余行隐藏,只显示一行
1
12
13
5
61

2.4选项 -t  :指定分隔符;-k :指定字符;-o :指定保存文件

sort -t '.' -k 4 -n 123.txt -o abc.txt
cat abc.txt
192.168.88.10
192.168.88.20
192.168.88.52
192.168.88.62
192.168.88.100
192.168.88.201

二、uniq命令

用于报告或者忽略文件中连续的重复行,常与 sort 命令结合使用

1.语法格式 

格式:
   uniq [选项] 参数
   cat file | uniq

常用选项:
-c:进行计数,并删除文件中重复出现的行
-d:仅显示连续的重复行
-u:仅显示出现一次的行

2.命令演示

2.1只使用uniq命令只隐藏连续重复的多余行

cat 123.txt 
12
15
12
666
777
222
222
uniq 123.txt 
12
15
12
666
777
222

2.2选项-c :对连续重复行进行计数,并删除重复行

uniq -c 123.txt 
      1 12
      1 15
      1 12
      1 666
      1 777
      2 222
#将文件中所有重复行进行计数
sort -n 123.txt | uniq -c
      2 12
      1 15
      2 222
      1 666
      1 777

2.3选项 -u :仅显示出现一次的行

uniq -u 123.txt 
12
15
12
666
777
#将文件行进行排序,然后显示出现一次的行
sort -n 123.txt | uniq -u
15
666
777

2.4选项 -d :仅显示连续重复的行

uniq -d 123.txt 
222
sort -n 123.txt | uniq -d
12
222

3.实际应用

3.1将远程破解主机密码的ip进行筛选,将这些ip输入到/etc/host.deny文件中,远程登录密码输入错误的IP地址会记录在 /var/log/secure 日志文件中

将这一行内容从日志文件中提取出来

 提取出登录失败的IP地址

排序IP地址并计数

3.2利用脚本实现操作

#!/bin/bash

cat /var/log/secure | grep "Failed password" | awk '{print $11}' | sort -n | uniq -c > ./abc.txt
IFSA=$IFS
IFS=$'\n'
for i in  `cat ./abc.txt`
do
  num=$(echo $i | awk '{print $1}')
  #将大于3次密码错误的远程连接的IP筛查出来 
  if [ $num -gt 3 ]
  then
    ip=$(echo $i | awk '{print $2}')
   #将ip加入/etc/hosts.deny文件,拒绝访问
    echo "sshd:$ip" >> /etc/hosts.deny
  fi
done

IFS=$IFSA

三、tr命令

常用来对来自标准输入的字符进行替换,压缩和删除

1.语法格式

格式:
    tr [选项] 参数
参数:
字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换
的目标字符集。但执行删除操作时,不需要参数“字符集2”
字符集2:指定要转换成的目标字符集

常用选项:
-c:保留字符集1的字符,其他字符(包括换行符 \n)用字符集2替换
-d:删除所有属于字符集1的字符
-s:将重复出现的字符串压缩为一个字符;用字符集2 替换 字符集1
-t:字符集2 替换 字符集1,不加选项同结果

2.命令演示

#将a-z 替换为 A-Z
echo "abc" | tr "a-z" "A-Z"
ABC
#将原字符 a 替换为 A
echo "abc" | tr "a" "A"
Abc
#将字符 ac 替换为 AC
echo "abc" | tr "ac" "AC"
AbC

2.1选项 -c :保留字符集1的字符,其他字符用字符集2字符替换

echo -e "ab\nadc\nabcd" > 123.txt
cat -A 123.txt 
ab$
adc$
abcd$
echo -e "ab\nadc\nabcd" | tr -c "ab" "0"
ab0a000ab000
echo -e "ab\nadc\nabcd" | tr -c "ab\n" "0"
ab
a00
ab00

2.2 选项 -d :删除字符集1的字符

echo "hello world" | tr -d "wld"
heo or
echo "hello world" | tr -d " "
helloworld
echo "hello world" | tr -d "ho"
ell wrld

2.3选项 -s :将重复字符压缩成一个字符

echo "hello    world" | tr -s "l"
helo    world
echo "hello    world" | tr -s "l "
helo world
echo -e "a\n\n\nb\n\n\nc"
a


b


c
echo -e "a\n\n\nb\n\n\nc" | tr -s "\n"
a
b
c
echo -e "a\n\n\nb\n\n\nc" | tr -d "\n"
abc

2.4选项 -s :将字符集2字符替换字符集2的字符

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#用空格替换冒号
echo $PATH | tr -s ":" " "
/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /root/bin
#用逗号替换冒号
echo $PATH | tr -s ":" ","
/usr/local/sbin,/usr/local/bin,/usr/sbin,/usr/bin,/root/bin

3.用命令对数组中的值进行排序

array=(1 65 32 24 12 23 15)
echo ${array[@]}
1 65 32 24 12 23 15
echo ${array[@]} | tr " " "\n"
1
65
32
24
12
23
15
echo ${array[@]} | tr " " "\n" |sort -n
1
12
15
23
24
32
65
echo ${array[@]} | tr " " "\n" |sort -n | tr "\n" " "
1 12 15 23 24 32 65

四、cut命令

显示行中的指定部分,删除文件中指定字段

1.语法格式

格式:
    cut 参数
    cat file | cut 选项
常用选项:
-f:通过指定哪一个字段进行提取
-d:指定分隔符,默认分隔符为tab
--complement:用于排除所指定的字段
--output-delimiter:更改输出内容的分隔符

2.命令演示

2.1选项 -f:提取指定字符  ; -d :指定分隔符

tail -3 /etc/passwd
wangwu:x:1003:1003::/home/wangwu:/bin/bash
wolong:x:1004:1004::/home/wolong:/bin/bash
fengchu:x:1005:1005::/home/fengchu:/bin/bash

tail -3 /etc/passwd | cut -d ":" -f 1
wangwu
wolong
fengchu

tail -3 /etc/passwd | cut -d ":" -f 1,3
wangwu:1003
wolong:1004
fengchu:1005

tail -3 /etc/passwd | cut -d ":" -f 1,3,7
wangwu:1003:/bin/bash
wolong:1004:/bin/bash
fengchu:1005:/bin/bash

2.2选项 --output-delimiter :更改输出内容的分隔符

tail -3 /etc/passwd | cut --output-delimiter=" " -d ":" -f 1,3
wangwu 1003
wolong 1004
fengchu 1005

tail -3 /etc/passwd | cut --output-delimiter="," -d ":" -f 1,3
wangwu,1003
wolong,1004
fengchu,1005

#awk命令与cut命令效果相似,输出内容默认分隔符为空格
tail -3 /etc/passwd | awk -F: '{print $1,$3}'
wangwu 1003
wolong 1004
fengchu 1005
tail -3 /etc/passwd | awk -F: '{print $1","$3}'
wangwu,1003
wolong,1004
fengchu,1005
tail -3 /etc/passwd | awk -F: '{print $1":"$3}'
wangwu:1003
wolong:1004
fengchu:1005

2.3选项 -complement :输出排除字段

tail -3 /etc/passwd 
wangwu:x:1003:1003::/home/wangwu:/bin/bash
wolong:x:1004:1004::/home/wolong:/bin/bash
fengchu:x:1005:1005::/home/fengchu:/bin/bash

tail -3 /etc/passwd | cut --complement -d ":" -f 1,3
x:1003::/home/wangwu:/bin/bash
x:1004::/home/wolong:/bin/bash
x:1005::/home/fengchu:/bin/bash

tail -3 /etc/passwd | cut --complement -d ":" -f 1
x:1003:1003::/home/wangwu:/bin/bash
x:1004:1004::/home/wolong:/bin/bash
x:1005:1005::/home/fengchu:/bin/bash

tail -3 /etc/passwd | cut --complement -d ":" -f 2,3,4,5
wangwu:/home/wangwu:/bin/bash
wolong:/home/wolong:/bin/bash
fengchu:/home/fengchu:/bin/bash

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

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

相关文章

Git的安装与版本控制

这里写目录标题 原理安装基本使用gitee-IDEA协同开发成员邀请开发组成员指定仓库权限给当前仓库设定分支提交代码时必须向自己的分支提交合并分支 - 无冲突 原理 Git本地有四个工作区域&#xff1a; 工作目录&#xff08;Working Directory&#xff09;、暂存区(Stage/Index)、…

【Linux】笔记分享

目录 - 前言- 目录结构- 磁盘文件系统- 文件权限 ls -l 的内容文件及目录权限实际案例 修改权限 -chmod[change ...]第一种方式&#xff1a; 、-、 变更权限第二种方式&#xff1a;通过数字变更权限 修改文件所有者 -chown 修改文件所在组 -chgrp - 命令类型基础命令网络性能…

【数据类型-列表】------- PYTHON基础9

内容目录 一、数据类型-列表1. 列表1.1. 列表的截取 result List[start:end:step]1.2. 列表元素的修改 List[index] element1.3. 列表元素的删除 del List[index] 或 del List[start:end:step]1.4. 列表元素的拼接 “” 或者增量赋值运算符 “” 2. 列表常用内置函数 对象.内…

jdbc工具包

JDBC工具类 介绍 JDBC全称是Java数据库连接&#xff08;Java Database connect&#xff09;&#xff0c;它是一套用于执行SQL语句的JavaAPI。应用程序可通过这台API连接到关系数据库&#xff0c;并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。 JDBC实现细节 从…

深入浅出C语言——排序

文章目录 排序的概念常见的排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序hoare版本挖坑法前后指针版本快速排序的非递归形式 归并排序递归版本非递归版本 计数排序排序算法复杂度及稳定性分析 排序的概念 排序就是使用使一串记录&#xff0c;按照其中的某个或某些关…

vue3 nextTick()应用

在Vue3中&#xff0c;可以使用nextTick函数来延迟执行某些操作&#xff0c;这些操作会在下一次DOM更新周期之后执行。这个函数通常用于在数据更新后&#xff0c;等待DOM更新之后执行一些操作&#xff0c;比如获取DOM元素的尺寸、位置等。 nextTick() 例如&#xff0c;以下一个…

C语言—与坤(机)对弈

目录 设计思路 游戏运行效果 函数的声明 头文件game.h 游戏主体(源文件) 1.game.c 2.test.c 各文件的阐述 各部分的设计心得 1.打印菜单 2.初始化棋盘 3.打印棋盘 棋盘最终效果 1.打印数据 2.打印分割线 如何扩展为10 x 10 棋盘&#xff1f; 4.玩家下棋、电脑下…

mkv文件怎么转换成mp4?来看看这四种转换方式吧!

mkv文件怎么转换成mp4&#xff1f;在很多小伙伴看到&#xff0c;图片就是图片&#xff0c;音频就是音频&#xff0c;视频就是视频&#xff0c;它们展现给人们的效果都差不多。但实际上&#xff0c;不管是图片、视频还是音频文件&#xff0c;其中一个重要的区别在于它们的文件格…

照片尺寸怎么调整大小?三个方法,高效、快捷、安全!

照片尺寸怎么调整大小&#xff1f;照片是我们在日常生活和办公中经常会使用的文件类型之一。在制作各种文件、讲义、PPT、视频等内容时&#xff0c;图片都会成为重要的一部分。不同的图片格式和大小各有特点&#xff0c;有些图片虽然比较大但画质清晰&#xff0c;有些则方便传输…

选择排序,直接插入排序

目录 一、选择排序 1.基本思想 2.直接选择排序的流程 3.实验 二、直接插入排序法 1.基本思想 2.直接插入排序法的流程 3.实验 三、反向排序 1.实验 一、选择排序 与冒泡排序相比&#xff0c;直接选择排序的交换次数更少&#xff0c;所以速度会更快。 1.基本思想…

centos linux 配置私有网段并联网

文章目录 1. 创建虚拟机2. 虚拟机 A 配置网络3. 虚拟机 B 分配静态地址4. 测试 1. 创建虚拟机 vcenter 创建两台虚拟机A 、B&#xff0c;如何创建虚拟机请参考这里 虚拟机 A 具备两个网络接口&#xff0c;外网接口为 ens192 ip&#xff1a;192.168.22.6/20&#xff0c;网关为…

Golang tracing:与 OpenTelemetry、jaeger实现 跨服务 全链路追踪

使用 OpenTelemetry 链路追踪说明 工作中常常会遇到需要查看服务调用关系,比如用户请求了一个接口接口会调用其他grpc,http接口,或者内部的方法这样的调用链路,如果出现了问题,我们需要快速的定位问题,这时候就需要一个工具来帮助我们查看调用链路OpenTelemetry就是这样一个工…

Sui改进提案(SIPs)及其审核流程

SIPs提供了一个清晰透明的流程&#xff0c;使社区可以对Sui网络提出改进建议。 Sui基金会致力于打造一个开放协作的生态&#xff0c;因此推出了Sui改进提案&#xff08;SIPs&#xff0c;Sui Improvement Proposals&#xff09;&#xff0c;这是一个记录社区为去中心化未来的发…

如何利用API做好电商,接口如何凋用关键字

一.随着互联网的快速发展&#xff0c;电子商务成为了众多企业的首选模式&#xff0c;而开放API则成为了电商业务中不可或缺的部分。API&#xff08;Application Programming Interface&#xff09;&#xff0c;即应用程序接口&#xff0c;是软件系统不同组件之间交互的约定。电…

登录校验2.0

登录校验2.0 Filter Filter详解 过滤器Filter在使用中的一些细节&#xff0c;主要介绍一下3个方面的细节&#xff1a; 过滤器的执行流程过滤器的拦截路径配置过滤器链 执行流程 过滤器当中我们拦截到了请求之后&#xff0c;如果希望继续访问后面的web资源&#xff0c;就要…

内容编排与Kubernetes

第一节 内容编排与Kubernetes 为什么要用k8s 集群环境容器部署的困境&#xff0c;假设我们有数十台服务器。分别部署Nginx&#xff0c;redis&#xff0c;mysql&#xff0c;业务服务。如何合理的分配这些资源。这里就需要用到容器编排 容器编排 在实际集群环境下&#xff0…

线性结构-队列

队列是一种先进先出First In Fisrt Out,FIFO的线性表。 与一般的数组和链表不同&#xff0c;队列要求所有的数据只能从一端进入&#xff0c;从另一端离开。 输入进入的一端叫队尾rear&#xff0c;数据离开的一端叫队头front。 数据只能从队尾进入队列&#xff0c;从队头离开队…

VSCODE配置ROS编译环境

目录 一、安装插件 二、环境配置 2.1初始化工作空间 2.2配置VSCode 2.2.1创建功能包 2.2.2配置 c_cpp_properties.json 2.2.3配置 task.json 2.2.4配置 CMakeLists.txt 三、运行程序 3.1编译程序 3.2启动ros master 3.3执行可执行文件 用VSCode编辑ROS程序时&#xf…

linux 内核内存管理

物理内存 相关数据结构 page&#xff08;页&#xff09; Linux 内核内存管理的实现以 page 数据结构为核心&#xff0c;其他的内存管理设施都基于 page 数据结构&#xff0c;如 VMA 管理、缺页中断、RMAP、页面分配与回收等。page 数据结构定义在 include/linux/mm_types.h …

使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中

作者&#xff1a;SRE运维博客 博客地址&#xff1a;https://www.cnsre.cn/ 文章地址&#xff1a;https://www.cnsre.cn/posts/221205544069/ 相关话题&#xff1a;https://www.cnsre.cn/tags/aws/ 躺了好久&#xff0c;诈尸了。因为换了工作&#xff0c;所以比较忙一直没有时间…