shell脚本之“sort“、“uniq“、“tr“、“cut“、“split“、“paste“以及“eval“命令详解

news2024/11/30 8:32:44

文章目录

  • sort命令
  • uniq命令
  • tr命令
  • cut命令
  • split命令
  • paste命令
  • eval命令
  • 总结

sort命令

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

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

在这里插入图片描述

语法格式

sort [选项]   参数
cat file | sort  选项

常用选项

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

uniq命令

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

语法格式

uniq  [选项]   参数
cat file | uniq 选项

常用选项

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

在这里插入图片描述
在这里插入图片描述

例题演练一:

查找已知文件中出现超过三次的IP地址;

在这里插入图片描述

[root@clr /opt/practice]# vim 1.sh

#!/bin/bash
#查找已知文件test4中出现超过三次的IP地址

cat test4 | sort -n -t '.' -k4 | uniq -c > ./count.txt
#将test4文件中的IP地址以.分割,按照地字段进行排序后,统计重复行数,并删除重复行,将结果重定向写入到当
前目录下的count.txt文件中
IFSB=$IFS
IFS=$'\n'   #修改for循环的IFS环境只以\n换行符进行分割

for i in $(cat ./count.txt)
do
  num=$(echo $i | awk '{print $1}')  #获取重复行出现的次数
  #echo $num    #输出重复次数
  if [ $num -gt 3 ];then  #判断重复次数大于3次,输出第二字段的ip地址
    echo $i | awk '{print $2}'
  fi
done

IFS=$IFSB

[root@clr /opt/practice]# vim test4

192.168.80.1
192.168.80.45
192.168.80.1
192.168.80.1
192.168.80.79
192.168.80.11
192.168.80.100
192.168.80.100
192.168.80.561
192.168.80.11
192.168.80.11
192.168.80.100
192.168.80.561
192.168.80.87
192.168.80.11
192.168.80.3
192.168.80.100
192.168.80.51111

[root@clr /opt/practice]# vim count.txt 

      3 192.168.80.1
      1 192.168.80.3
      4 192.168.80.11
      1 192.168.80.45
      1 192.168.80.79
      1 192.168.80.87
      4 192.168.80.100
      2 192.168.80.561
      1 192.168.80.51111

例题演练二:

查找一分钟内五次登录系统输入密码错误的用户,并将该IP地址加入到黑名单/etc/hosts.deny中;

在这里插入图片描述
在这里插入图片描述

[root@clr /opt/practice]# vim 2.sh

#!/bin/bash
#查找一分钟内五次登录系统输入密码错误的用户,并将该IP地址加入到黑名单/etc/hosts.deny中

count=$(cat /var/log/secure|grep 'Failed password'|grep 'root'|awk '{print $11}'|sort -n -t '.' -k4|uniq -c)
#将test4文件中的IP地址以.分割,按照地字段进行排序后,统计重复行数,并删除重复行,将结果赋值给变量count
IFSB=$IFS
IFS=$'\n'   #修改for循环的IFS环境只以\n换行符进行分割

for i in $count
do
  num=$(echo $i | awk '{print $1}')  #获取重复行出现的次数
  #echo $num    #输出重复次数
  if [ $num -gt 5 ];then  #判断重复次数大于3次,输出第二字段的ip地址
    echo $i | awk '{print $2}'
  fi
done

IFS=$IFSB

在这里插入图片描述

tr命令

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

语法格式

tr [选项] [参数]

常用选项

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

参数

字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数"字符集2"指定转换的目标字符集。但执行删除操作时,不需要参数"字符集2;

字符集2:指定要转换成的目标字符集

在这里插入图片描述
在这里插入图片描述

删除空行的两种方法;

[root@clr /opt/practice]# echo -e "ab\n\n\n\n\n\ncd"
ab





cd
[root@clr /opt/practice]# echo -e "ab\n\n\n\n\n\ncd" | tr -s "\n"   #将重复出现的换行符压缩为一个,起到删除空行的效果
ab
cd
[root@clr /opt/practice]# echo -e "ab\n\n\n\n\n\ncd" | grep -v "^$"  #grep -v反向取空格,将空格以外的左右行输出
ab
cd

在这里插入图片描述
实战演练

利用sort和tr命令,实现元素序列的排序;

在这里插入图片描述

[root@clr /opt/practice]# vim 4.sh

#!/bin/bash
#利用sort和tr命令,实现元素序列的排序

arr=(14 25 78 36 1 3 5 45 39 68 14)
echo "排序前数据的值为:${arr[@]}"

newarr=($(echo ${arr[@]}| tr ' ' '\n' | sort -n | tr '\n' ' '))

echo "排序后数据的值为:${newarr[@]}"      

windows的换行:由回车符/r和换行符/n组成;而linux的换行:由换行符/n组成.

在这里插入图片描述
在这里插入图片描述

安装dos2unix工具,即可解决windows与linux文件不能兼容使用的问题;

[root@clr /opt/practice]# yum install -y dos2unix
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.huaweicloud.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 dos2unix.x86_64.0.6.0.3-7.el7 将被 安装
--> 解决依赖关系完成

在这里插入图片描述

cut命令

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

语法格式

cut 参数
cat file | cut选项

常用选项

选项命令含义
-f通过指定哪一个字段进行提取。cut命令使用"TAB"作为默认的字段分隔符
-d"TAB”是默认的分隔符,使用此选项可以更改为其他的分隔符
–complement此选项用于排除所指定的字段
–output-delimiter更改输出内容的分隔符

注意:

sort -t 指定分隔符  -k  指定字段号
cut  -d 指定分隔符  -f  指定字段号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

split命令

split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等
语法格式

split 选项 参数 原始文件 拆分后文件名前缀

常用选项

-l:以行数拆分
-b:以大小拆分
选项命令含义
-l按照行数分割文件,默认1000行一个文件
-b按照文件大小分割文件,单位:字节

在这里插入图片描述

paste命令

paste可以将不同文件的数据放在一行。缺省情况下,paste使用空格或者tab键分隔新行中的不同文件。

命令格式

paste <-d> <-s> file1 file2

常用选项

选项命令含义
-d制定不同于空格或tab键的分隔符。比如使用@分隔符,就可以-d @
-s将每个文件合并成行,而不是按行合并。(即每个文件中的内容占一行。而不是从每个文件取行,合并成新行)

在这里插入图片描述
在这里插入图片描述

eval命令

命令字前加上eval时,shell会在执行命令之前扫描它两次。eval命令将首先会先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描

在这里插入图片描述
在这里插入图片描述

[root@clr /etc/yum.repos.d]# bash 4.sh 1 2 3 7 6 6
6
[root@clr /etc/yum.repos.d]# cat 4.sh
#!/bin/bash

eval echo \$$#
[root@clr /etc/yum.repos.d]# eval echo |$$# -> echo $6 -> 6

在这里插入图片描述

总结

命令关键字命令含义常用选项
sort排序-n(数字排序) -r(反向排序) -t(指定分隔符) -k(指定排序字段)
tr替换、删除、压缩-t(字符集2替换字符集1) -d(删除) -s(压缩重复字符) -c(保留字符集1,其余所有用字符集2替换)
cut截取字段-d(更改分隔符) -f(指定提取字段) --output-delimiter(更改输出分割符) --complement(排除指定字段)
uniq去重、统计重复次数 -c(删除重复行,并进行计数) -d(显示连续的重复行) -u(仅显示出现一次的行)
split拆分文件-l(以行数拆分) -b(以大小拆分)
paste按列合并文件 -d(指定分割符) -s(转置,将列转换为行)
eval扫描两次执行命令,放在命令前使用——

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

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

相关文章

Chrome和edge报STATUS_STACK_BUFFER_OVERRUN错误的处理办法

Chrome和edge突然就报STATUS_STACK_BUFFER_OVERRUN错误&#xff0c;原因未知。 解决方案&#xff1a; Chrome 卸载本地的chrome访问https://www.chromedownloads.net/chrome64win/&#xff08;windows64&#xff09;https://www.chromedownloads.net/chrome32win/&#xff0…

母亲节到了,写一个简单的C++代码给老妈送上一个爱心祝福

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; C/C专栏 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样唾…

快速上手Arthas

目录 基本概述 安装方式 基础指令 jvm相关指令 class/classloader相关指令 monitor/watch/trace相关指令 其他 基本概述 jconsole等工具都必须在服务端项目进程中配置相关的监控参数&#xff0c;然后工具通过远程连接到项目进程&#xff0c;获取相关的数据。这样就会带…

快速查询的秘籍——B+树索引

页和记录的关系示意图 InnoDB根据主键查找数据的过程是什么&#xff1f; 没有索引的查找是什么&#xff1f;索引查找和通过主键查找有什么关系&#xff1f; 索引是解决什么问题的&#xff1f; 索引是解决定位数据页的&#xff0c;而不是定位一个页中的数据的&#xff0c;定位…

MATLAB绘制动画(一)质点动画

vx 100*cos(1/3*pi); vy 100*sin(1/3*pi); t 0:0.005:18; x vx*t; y vy*-9.8*t.^2/2; comet(x,y) 这里只是截取了最后的画面&#xff0c;正常运行时&#xff0c;可以看到从最高点向下落的动作。 想要了解这段代码&#xff0c;我们要知道comet函数的意义 这个函数可以沿着…

ChatGPT 发布重磅更新,插件系统即将上线!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 昨天凌晨&#xff0c;ChatGPT 为诸多 Plus 会员陆续开放了插件系统内测权限&#xff0c;申请比较早的用户&#xff0c;现在应该都能体验上最新的插件系统了。 为了让风暴来得更为猛烈&…

SQL在线刷题

牛客网学习SQL在线编程&#xff0c;牛客网在线编程&#xff0c;一共82道 用于实践的网站&#xff0c;在线运行SQL 目前43道&#xff0c;刷不动了&#xff0c;剩下的之后找机会搞 只记录有疑问的题目 简单 SQL196 查倒数第三 查找入职员工时间排名倒数第三的员工所有信息 …

js堆和栈

目录 关键句提取&#xff1a; 一、认识堆和栈 1、内存操作场景 2、数据结构场景 二、堆和栈的优缺点 1.栈(stack) 2.堆(heap) 3.总结&#xff1a; 三、堆和栈的溢出 四、 传值和传址 五、为什么会有栈内存和堆内存之分&#xff1f; 垃圾回收 标记清理 引用…

品牌控价的好处有哪些、品牌控价方法有哪些

今天和大家聊聊【品牌控价】&#xff0c;他们常会说到自己的产品有多好&#xff0c;经销商们体验完也说产品效果非常不错&#xff0c;价格在业内也是有很大优势&#xff0c;但是客户购买量和预期效果确有很大差距&#xff0c;难道我产品性价比这个高&#xff0c;还不能打动顾客…

一种不需要注册没有魔法使用ChatGPT的方法

关于我&#xff1a;关注AIGC、读书、成长和自媒体。加我微信&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt。进ChatGPT交流群。 如果你还没有使用过ChatGPT&#xff0c;那你来对了地方。文章结尾&#xff0c;我将提供一种能不需要梯子、不需要注册&#xff0c;无…

【数据结构.C】顺序表和单链表的增删查改

宝子&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重要…

干货! CVPR:基于VDB的高效神经辐射渲染场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 作者介绍 严 涵 上海交通大学2019级人工智能专业本科生&#xff0c;研究兴趣主要是与NeRF相关的三维重建算法。 报告题目 基于VDB高效神经辐射渲染场 内容简介 01 NeRF NeRF的提出起初主要是为了解决新视⻆生成…

shell脚本常用的命令

管理文件内容的使用 一、sort命令二、uniq命令三、tr命令四、cut命令五、split命令六、paste命令七、eval命令 一、sort命令 sort命令是以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序&#xff0c;比较原则是从首字符向后&#xff0c;依次按ASCII码…

尚硅谷Vue配套资源

1.gitee地址&#xff1a; https://gitee.com/coderPatrickStar/Vue/tree/master/%E5%B0%9A%E7%A1%85%E8%B0%B7Vue%E9%85%8D%E5%A5%97%E8%B5%84%E6%BA%90 2.

Linux常用命令——id命令

在线Linux命令查询工具 id 显示用户的ID以及所属群组的ID 补充说明 id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID&#xff08;GID&#xff09;则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它&#xff0c;只需…

编译一个开源软件遇到的问题总结

一、开源软件Supra 需要编译一个开源的软件Supra&#xff0c;它需要的前置条件是&#xff1a; 1、cmake ≥ 3.4 2、gcc ≥ 4.8 or min. Visual Studio 2015 (Compiler needs to be supported by CUDA! For that, see the CUDA installation instructions.) 3、QT ≥ 5.5 4、TB…

infuluxdb时序数据库介绍

时序数据库&#xff08;influxdb&#xff09; InfluxDB是一个开源的、高性能的时序型数据库&#xff0c;在时序型数据库DB-Engines Ranking上排名第一。 下载地址:https://dl.influxdata.com/influxdb/releases/influxdb2-2.3.0-windows-amd64.zip 启动&#xff1a; CMD到解压…

游戏服务器被攻击怎么办

游戏服务器的安全是每个游戏开发者和管理员必须关注的问题。然而&#xff0c;尽管有各种防御措施&#xff0c;游戏服务器仍然可能受到攻击。小编将为您介绍游戏服务器被攻击的原因&#xff0c;并提供一些解决方案。 游戏服务器被攻击的原因 1. DDoS 攻击 DDoS 攻击是最常见的攻…

【SSA-LSTM】基于SSA-LSTM预测研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

CRM软件标准版和定制版有什么分别

CRM系统能够帮助企业管理客户互动&#xff0c;跟踪客户数据&#xff0c;实现业务流程自动化。很多企业不太了解&#xff0c;标准CRM软件和定制CRM软件的区别是什么&#xff0c;该如何选择&#xff1f;下面我们来说说定制CRM的优势。 什么是标准CRM软件&#xff1f; 标准CRM软…