shell脚本之正则表达式

server/2024/10/9 15:23:05/

一、常用命令

1.sort命令

sort命令对行内容进行排序,默认按首字排序

cat file | sort 选项

或sort [选项] 文件

常用选项

-n 对数字进行排序

-r 反向排序数组

-u 排序后去重

-t ‘字符分隔符’ -k 字段序号 (根据-t指定的分隔符的第k个字段进行排序)

-o 输出文件,将排序后的结果转存至指定文件

-f 忽略大小写,会将小写字母都转换为大写字母进行比较

-b 忽略每行前面的空格

如何找到某个目录下最大的文件

2.uniq命令

对连续的重复行进行去重

cat file | uniq 选项

uniq 选项 文件

uniq 文件   默认去除连续重复的行内容,只显示一次

-c 对连续的重复行进行去重,并统计重复次数

-d 仅输出连续重复的行

-u 仅输出不连续重复的行

结合sort -n可以把重复行内容合并显示

结合sort -n统计内容重复出现了几次

结合sort -n查看那些是重复出现的行内容

结合sort -n查看没有重复过的行内容

编写一个脚本,使远程登录本机的所有主机输入密码错误超过5次就锁定该IP

3.tr命令

对输入的内容进行替换

XXX | tr 选项 ‘参数1’  ‘参数2’ 

-t 是tr命令的默认选项,使用参数2替换掉参数1,也可以是一个范围

-c 仅保留参数1的字符,其他字符(包括\n))用 参数2替换

-s 根据参数1进行去重,如果有参数2则再用参数2的字符替换参数1的字符

-d 删除所有参数1的字符

通过tr命令将一个IP地址分成4段

对数组排序   echo ${数组名[@]} | tr ' ' '\n' | sort -rn | tr '\n' ' '

tr删除制表符,进行格式转化

Windows另起一行格式(\r\n)转换成Linux另起一行

删除空行 

cat 文件 | grep -v "^$"
cat 文件 | tr -s "\n"


4.cut 命令

cut  对行内容进行字段截取
XXX | cut 选项 参数

-d '分隔符' -f 字段序号       根据 -d 指定的分隔符的截取显示 -f 指定的字段

--complement                    取反,不显示 -f 指定的字段

--output-delimiter '分隔符'   指定输出的字段分隔符

截取字符串

cut 命令截取

字符串分片

echo ${变量:下标:长度}                      #下标起始从0开始
echo $变量 | cut -b 起始下标-终止下标        #下标起始从1开始
expr substr $变量 起始下标 长度              #下标起始从1开始

5.split命令

按照格式拆分文件

-l 根据行数分割文件

-b 根据大小分割文件

-d 输出的目标文件后缀用数字替代

如何将一个10G文件分割成10个1G的文件:split -b 1G 原文件 目标文件名前缀

如何将一个100行文件分割成10个10行的文件:split -l -10 原文件 目标文件名前缀

6.paste命令

paste  将多个文件按照列进行合并
paste 选项 文件1 文件2 ...

-d '分隔符'     指定输出的字段分隔符
-s              将每个列横向输出

合并文件的行   cat 文件1 文件2  ... > 新文件
合并文件的列   paste -d '分隔符' 文件1 文件2 ... > 新文件

7.eval命令(了解)

在命令执行前先将命令行的变量置换成相对应的值,然后再执行命令

a=100
b=a
eval echo \$$b  置换成-->  echo $a  执行-> 100
eval $b=50  置换成--> a=50 执行
echo $a -> 50

二、正则表达式

通配符*?[...]   作用对象 文件/目录名,*表示匹配任意长度的任意字符。

正则表达式     作用对象 文件内容   .   *表示匹配任意长度的任意字符。用法注意不能跟通配符混淆

1.基础元字符

\      转义字符,将一些特殊符号转义成普通字符 \? \! \\  将一些普遍字母字符转义成特殊字符 \n \t \r
^      匹配以指定字符串开头的  ^XXX
$      匹配以指定字符串结尾的  XXX$    ^$
     代表除了 \n 以外的任意字符
[XXX]  匹配中括号里的列表中的任意一个字符  [.\n]  [0-9]  [a-zA-Z0-9]
[^XXX] 匹配除了中括号里的列表中的任何字符  [^0-9]匹配所有非数字的字符   [^a-zA-Z]匹配所有非大小字母的字符
*        匹配*前面的字符或表达式任意次数(包括0次 1次或多次) .*   [0-9]*
{n}     匹配{}前面的字符或表达式 n 次
{n,}     匹配{}前面的字符或表达式至少 n 次(大于等于 n 次)
{n,m}  匹配{}前面的字符或表达式 n 到 m 次(大于等于 n 次且小于等于 m 次)
(注:grep  sed 使用时 {} 前面要加 \ ;egep  awk  grep -E  sed -r 使用时 {} 前面不用加 \)

2.扩展元字符

+      匹配+前面的字符或表达式至少1次(大于等于1次 {1,})
?      匹配?前面的字符或表达式0次或1次({0,1})
()      将()里的表达式作为一个整体    (oo)*   (oo)?
|        或       (oo|aa)   (oo|aa)?

练习

1.过滤出7位数以025开头的号码

2.


http://www.ppmy.cn/server/42532.html

相关文章

slam14讲(第8讲、前端里程计)LK光流、直接法

直接法的引出 因为第7讲大部分都是讲特征点法,通过提取orb特征点和点的描述子,来构建两帧图像之间的特征点对应关系。这种方法会有缺点: 关键点和描述子提取计算耗时,如果相机的频率高,则slam算法大部分耗时被占。特…

了解监控易(42):国产化信创运维,自主可控

在信息化快速发展的今天,数据安全和系统自主可控性成为了企业关注的重点。监控易作为一款具有完全自主可控优势的监控运维解决方案,凭借其独特的技术架构和灵活的适配能力,成功满足了信创及国产化替代的需求,展现出了显著的竞争优…

Casper Blockchain:基于 CSPR.build 套件,实现闪电般的 dApp 部署

对于许多工程师而言,即使作为对于区块链较为了解的终端用户,与区块链的整合仍然是一个谜团。虽然很多技术文章通常将注意力和报道重点放在智能合约开发上,但当涉及到如何将区块链技术与其应用程序的其余部分集成时,开发者往往只能…

STM32看门狗

文章目录 WDG(Watchdog)看门狗独立看门狗独立看门狗框图超时时间计算 窗口看门狗超时时间 独立看门狗与窗口看门狗对比补充 WDG(Watchdog)看门狗 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干…

继续分析开发人员容易被骗的原因和防范措施

继续分析开发人员容易被骗的原因和防范措施,可以深入探讨一些具体的技术细节和实际操作建议,以更全面地理解和应对这一问题。 技术细节: 未加密的敏感数据传输: 原因:开发人员可能忽视了数据传输过程中的安全性&#…

Javaweb 中过滤器(Filter)的使用

在 Java Web 开发中,过滤器(Filter)是一种用于拦截和处理请求和响应的组件。它们在 Servlet 请求到达目标 Servlet 之前,或者在响应发送给客户端之前,对请求和响应进行预处理或后处理。过滤器在许多场景中都非常有用&a…

使用Python生成一束玫瑰花

520到了,没时间买花?我们来生成一个电子的。 Python不仅是一种强大的编程语言,用于开发应用程序和分析数据,它也可以用来创造美丽的艺术作品。在这篇博客中,我们将探索如何使用Python生成一束玫瑰花的图像。 准备工作…

【不太正常的题】LeetCode.232:用栈的函数接口实现队列

🎁个人主页:我们的五年 🔍系列专栏:初阶数据结构刷题 🎉欢迎大家点赞👍评论📝收藏⭐文章 🚗 1.问题描述: 题目中说了只能使用两个栈实现队列,并且只能使用…