shell编程之正则表达式与文本处理器
目录
一、正则表达式
1.1、正则表达式定义
1.2、正则表达式组成
1.3、基础正则表达式元字符
1.4、扩展正则表达式
二、文本处理工具
1、grep 命令
例题
2、cut 列截取工具
3、sort 排序工具
4、uniq 去重工具
5、tr 修改工具
三、总结
引言:正则表达式,又称规则表达式。(英语:Regular Expression),在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索,替换那些符合某个模式(规则)的文本。
一、正则表达式
1.1、正则表达式定义
正则表达式,又称正规表达式,常规表达式
使用字符串来描述、匹配一系列符合某个规则的字符串
正则表达式--通常用于判断语句中,用来检查某一些字符串是否满足某一格式
正则表达式是由普通字符与元字符组成
1.2、正则表达式组成
- 普通字符
- 大小写字母、数字、标点符号及一些其他符号
- 元字符
- 在正则表达式中具有特殊意义的专用字符
Linux 中常用的有两种正则表达式引擎
基础正则表达式:BRE
扩展正则表达式: ERE
1.3、基础正则表达式元字符
支持的工具: grep、egrep、sed、awk
基础正则表达式是常用的正则表达式部分
元字符 | 作用 |
* |
匹配前面子表达式0次或者多次 例:goo*d,go.*d |
[list] |
匹配list列表中的一个字符 例:go[loa]d,[a-z],[0-9]匹配任意一位数字 |
[^list] |
匹配任意非list列表中的一个字符 例:[^0-9],[^a-z]匹配任意一位非小写字母 |
\{n,m\} |
匹配前面子表达式n到m次 例:go\{2,3\}d,'[0-9]\{2,3\}'匹配两位到三位数字 |
\{n,\} |
匹配前面子表达式不少于n次 例:go\{2,\}d,'[0-9]\{2,\}'匹配两位及两位以上的数字 |
\{n\} |
匹配前面子表达式n次 例:go\{2\}d,'[0-9]\{2\}'匹配两位数字 |
. |
匹配除\n之外的任何一个字符 例:go.d , g..d |
$ |
匹配字符串结束的位置 例:word$,^$匹配空行 |
^ |
匹配字符串开始的位置 例:^a,^the,^#,^[a-z] |
\ |
转义字符,用于取消特殊符号的的含义 例:\!,\n,\$等 |
注:egrep,awk使用{n}、{n,}、{n,m} 匹配时“{}”前面不用加“\” |
1.4、扩展正则表达式
扩展正则表达式是对基础正则表达式的扩充深化
元字符 | 作用 |
+ |
匹配前面子表达式一次以上 例:go+d,将匹配至少一个o,如god,good,goood等 |
? |
匹配前面子表达式0次或一次 例:go?d,匹配将为gd或者god |
() |
将括号内的字符创作为一个整体 例:g(oo)+d,将匹配oo整体一次以上 |
| |
以或的方式匹配字符条串 例:g(oo|la)d,将匹配good或glad |
二、文本处理工具
1、grep 命令
grep命令使用正则表达式来搜索文本,并且把匹配的文本打印出来
grep [选项] ..查找条件 目标文件
常用选项 | |
-E | 将样式为延伸的正则表达式来使用。 |
-c | 计算符合样式的列数。 |
-i | 忽略字符大小写的差别。 |
-n | 列出所有匹配的文本行,并显示行号 |
-o | 只显示被模式匹配到的字符串 |
-v | 显示不包含匹配文本的所有行。 |
--color=auto | 可以将找到的关键词部分加上颜色的显示 |
案例:
-c 统计ly 的行数 不显示内容
-i 不区分大小写查找文件中所有the的行
-v 取反 查找文件中,没有the的行显示出来
将非空行写入到2.txt文件
-n 查找并显示行数
若反向选择,如查找不包含“the”字符的行,则需要通过 grep 命令的“-v”选项实现,并配合“-n”一起使用显示行号。
利用中括号“[]”来查找集合字符
查找“oo”前面不是“w”的字符串,只需要通过集合字符的反向选择“[^]”来实现该目的
可以使用“grep -n‘[^a-z]oo’ceshi.txt”命令实现,其中“a-z”表示小写字母,大写字母则通过“A-Z”表示。
查找包含数字的行可以通过“grep -n ‘[0-9]’ ceshi.txt”命令来实现
基础正则表达式包含两个定位元字符:“^”(行首)与“$”(行尾)
过滤出以字符和数字开头的行,显示行号 (中括号里取反,中括号外^以.,..开头)
过滤出以.结尾的行
因为小数点(.)在正则表达式中也是一个元字符,所以在这里需要用转义字符“\”将具有特殊意义的字符转化成普通字符
当查询空白行时,执行“grep -n‘^$’ceshi.txt”命令即可
查找任意一个字符“.”与重复字符“*”
在正则表达式中小数点(.)也是一个元字符,代表任意一个字符。例如执行以下命令就可以查找“w??d”的字符串,即共有四个字符,以 w 开头 d 结尾。
若查询包含至少两个 o 以上的字符串,则执行“grep -n 'ooo*' ceshi.txt”命令即可
查询以 w 开头 d 结尾,中间包含至少一个 o 的字符串
查找连续字符范围“{}”
查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串
查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串
例题
首先查到列出所有log文件并且重定向给grep
使用grep 查找error 的行
使用grep 来查找不包含info 的行
2、cut 列截取工具
使用说明:cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一
常用选项 | |
-b | 按字节截取 |
-c |
按字符截取,常用于中文 |
-d | 指定以什么为分隔截取,默认为制表符 |
-f | 通常和-d一起 |
案例
分割打印passwd第7列
分割打印passwd第1列和第7列
查看当前登录用户的第4个字节
-b 与 -c 的区别
cut只擅长于处理单个字符为间隔的文本,-b只能分割字母,-c既可以分割字母也可以分割中文
3、sort 排序工具
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样
语法:
sort [选项] 参数
常用选项 | |
-t | 指定分隔符,默认使用[Tab]吧 键或空格分隔 |
-k | 指定排序区域,哪个区间排序 |
-n | 按照数字进行排序,默认是以文字形式排序 |
-u |
等同于 uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功 |
-r |
反向排序,默认是升序,-r就是降序 |
-o |
将排序后的结果转存至指定文件 |
-f | 忽略大小写,会将小写的字母都转换为大写字母来进行比较 |
-b | 忽略每行前面的空格 |
案例
不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示
以冒号为分隔符,以数字大小对第三列排序(升序)
以冒号为分隔符,以数字大小对第三列排序(降序)
4、uniq 去重工具
主要用于去除连续的重复行
注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重
语法
uniq [选项] 参数
常用选项 | |
-c |
对重复的行进行计数 |
-d | 仅显示重复行 |
-u | 仅显示出现一次的行 |
案例
统计重复行的次数,不连续的重复行他不算做重复行
结合sort 命令排序去重
结合sort使用,过滤出重复行
过滤出不重复的行
查看登陆用户
查看登陆过系统的用户
5、tr 修改工具
它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符
语法
tr [选项] .. SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
常用选项 | |
-d | 删除字符 |
-s | 删除所有重复出现的字符,只保留第一个 |
将所有小写改成大写
当字符数量不对等时,相同字符只识别后一个,剩下未对应的全是最后替换字符
即a-s p-a(pp相同去后一个a) le-r
把替换的字符用单引号引起来,包括特殊字符
多个字符替换成一个/
删除字符a
对p字符去重,只保留第一个
查看登陆ip和使用者个数
查看客户端和监听服务端个数
三、总结
本编文章主要讲述了基础正则表达式元字符的用法以及扩展正则表达式元字符的用法,还有grep命令的使用方法和一些参数及案例,其中还有一些文本处理器的常用方法案例(cut、sort、uniq、tr)
shell编程之正则表达式与文本处理器相关推荐
- 独一无二 Shell 编程之正则表达式 与文本处理器 详细解释
技能展示: 基础正则表达式 扩展正则表达式 sed 工具使用方法 awk 工具使用方法 4.1 正则表达式 之前学习了 Shell 脚本的基础用法,已经可以利用条件判断.循环等语句编辑 Shell 脚 ...
- Shell 编程之正则表达式与文本处理器--(grep,egrep 与文本处理器-sed、awk、sort、uniq、tr)
文章目录 一.正则表达式 1.1 正则表达式概述 1.1.1 正则表达式的定义 1.1.2 正则表达式用途 1.2 基础正则表达式 1.3 基础正则表达式:grep命令 1.3.1 查找特定字符 1. ...
- Shell编程之正则表达式与文本编辑器
一.正则表达式 1.正则表达式概述 通常用于判断语句中,用来检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母.数字.标点符号及一些其他符号 元字符是指在正则表 ...
- 七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk
正则表达式定义 正则表达式,又称正规表达式.常规表达式 使用字符串来描述.匹配一系列符合某个规则的字符串 ●正则表达式组成 ◆普通字符 大小写字母.数字.标点符号及一些其他符号 ◆元字符 在正则表达式 ...
- Shell编程之正则表达式(及操作案例)
Shell 编程之正则表达式 正则表达式 1.正则表达式定义 正则表达式又称正规表达式.常规表达式.在代码中常简写为 regex.regexp 或 RE.正则表达式是使用单个字符串来描述.匹配一系列符 ...
- 理论+实操:shell 变成之正则表达式与文件处理器
文章目录 一 : 正则表达式 1.1 正则表达式概述 1.2**正则表达式的定义** 1.3 正则表达式用途 二 : 基础正则表达式(grep) 2.1**基础正则表达式示例** 2.1.1 查找特定 ...
- shell编程之正则表达式
shell编程之正则表达式 文章目录 shell编程之正则表达式 正则表达式 1. 正则表达式是什么? 2. 正则能干什么? 3. 正则当中名词解释 4. 第一类正则表达式 ㈠ 正则中普通常用的元字符 ...
- shell编程之正则表达式与总结(grep,egrep)与文件处理器和总结(sed,awk,sort,uniq)
文章目录 前言 一:基础正则表达式 1.1:正则表达式的定义 1.2:正则表达式用途 1.3:基础正则表达式 1.4:基础正则表达式:grep命令 1.4.1:查找特定字符 1.4.2:利用中括号&q ...
- shell编程之正则表达式——理论基础
目录 前言 一.基础正则表达式 1.1 正则表达式的定义 1.2 正则表达式用途 1.3 基础正则表达式 1.4 基础正则表达式:grep命令 1.4.1 查找特定字符 1.4.2 利用中括号&quo ...
- shell编程之正则表达式与总结(grep,egrep)
文章目录 前言 一:基础正则表达式 1.1:正则表达式的定义 1.2:正则表达式用途 1.3:基础正则表达式 1.4:grep命令 1.4.1:查找特定字符 1.4.2:利用中括号"[]&q ...
最新文章
- CactiEz 无法登陆 、重启不画图处理
- 世界上最大的黑客 Party,有关“DEFCON”的十个冷知识
- GODADDY主机用tar命令通过SSH远程打包20M以上的文件
- 使用redis4.0.1和redis-cluster搭建集群并编写重启shell脚本
- 如何保证战略落地_战略如何规划落地?值得借鉴
- win11 wsl centos7换源aliyun阿里云命令记录
- 深入了解DSP与ARM的区别与联系
- python列表元素替换的数据结构_Python基础学习数据结构(第2讲:列表;第2讲:列表创建、添加元素、插入元素、替换元素、删除元素、其他常用方法和列表派生),第二,主讲,追加,推导,式...
- 喜马拉雅贺雯迪:基于端到端TTS实现更具生动、富有情感的语音合成表现
- 本科生手握十余篇SCI,达博士毕业要求后,他获顶级名校全奖直博offer
- vi撤销、恢复撤销和删除
- myEclipse怎样将程序部署到tomcat(附录MyEclipse调试快捷键)
- 线段树(区间合并) HDOJ 3308 LCIS
- 关于C#中的get与set函数
- SoapUI测试webservice接口
- 价值1680元的python实战全套教学视频
- git log根据特定条件查询日志并统计修改的代码行数
- 缺失值处理 - 定位空值并用空值的上一个值填充 - (Excel)
- java 拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin
- 【nginx流程分析之初始化cycle】
热门文章
- 2.OSGI企业应用开发-Eclipse中搭建Felix运行环境
- Mysql如何保证原子性,一致性,持久性
- GIT (develop|MERGING)
- 制作rpm包的过程可能会遇见的一些问题
- 3.1 电压频率变换器
- python中def main是什么意思_python main用法解析
- 程序员的量化交易之路(22)--Cointrader值货币集合Currencies(10)
- linux snappy 版本,snappy初级文档
- 电脑更换硬盘 | 怎么迁移数据到新硬盘?
- Python转换excel文件,将xlsx文件转换为xls文件