Shell编程之正则表达式与文本处理器

Shell编程之正则表达式与文本处理器

文章目录


引言:正则表达式,又称作规则表达式;正则表达式是对 字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式不只有一种,在Linux中不同的程序可能会使用不同的正则表达式。

一、正则表达式

1.正则表达式定义

正则表达式,又称正规表达式、常规表达式

使用字符串来描述、匹配一系列符合某个规则的字符串

正则表达式组成:

**普通字符:**大小写字母、数字、标点符号及一些其他符号

**元字符:**在正则表达式中具有特殊意义的专用字符

工具:grep sed awk egrep

正则表达式–通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式是由普通字符与元字符组成

普通字符包括大小写字母、数字、标点符号及一些其他符号

元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

LINUX中常用的有两种正则表达式引擎

基础正则表达式:BRE

扩展正则表达式:ERE

2.基础正则表达式字符

基础正则表达式是常用的正则表达式部分

除了普通字符外,常见到以下元字符

\:转义字符,用于取消特殊符号的含义
例:\!、\n等

^:匹配字符串开始的位置
- 例:^a、^the、^#

$:匹配字符串结束的位置
例:word$

.:匹配除\n之外的任意的一个字符
例:go.d、g..d

*:匹配前面子表达式0次或者多次
例:goo* d、 go.*d

[^list]:匹配任意不在list列表中的一个字符
例:[^a-z]、[^0-9]、[^A-Z0-9]


\{n,m\}:匹配前面的子表达式n到m次,有\{n\}、\{n,\}、\{n,m\}三种格式
例:go\{2\}d、go\{2,3\}d、go\{2,\}d
3.扩展正则表达式元字符

支持egrep、awk

扩展正则表达式是对基础正则表达式的扩充深化

扩展元字符
+:匹配前面子表达式1次以上
例:go+d,将匹配至少一个o

?:匹配前面子表达式0次或者1次
例:go?d,将匹配gd或god

():将括号中的字符串作为一个整体
例:(xyz)+,将匹配xyz整体1次以上,如xyzxyz

|:以或的方式匹配字条串
例:good|food,将匹配good或者food
例2:g(oo|la)d,将匹配good或者glad

\n匹配一个换行符

\r匹配一个回车符

\t匹配一个制表符

二、grep

1.grep常用选项
grep [选项]… 查找条件 目标文件

-E:开启扩展(EXTEND)的正则表达式

-c:计算找到'搜寻字符串'的次数

-i:忽略大小写的不同,所以大小写视为相同

-o:只显示被模式匹配到的字符串

-v:反向选择,亦即显示出没有'搜寻字符串'内容的那一行!(反向查找,输出与查找条件不相符的行)

--color=auto:可以将找到的关键词部分加上颜色的显示!

-n:顺便输出行号
2.grep案例
2.1查找搜索字符
方法一:grep -c root /etc/passwd


方法二:cat /etc/passwd | grep root

在这里插入图片描述

2.2不区分大小写查找
 grep -i "the" /etc/passwd	#不区分大小写查找目录下含有the的行

在这里插入图片描述

2.3取反查找
grep -v root /etc/passwd 	#取反查找,将没有root的行显示出来

在这里插入图片描述

2.4将带有空行文件写入到test.txt文件

在这里插入图片描述

3.元字符
3.1查找特定字符
grep -n 'the' test.txt 

在这里插入图片描述

取反查找,查找不带有"the"字符行,

grep -vn 'the' test.txt 

在这里插入图片描述

3.2多个参数查找内容

在正则表达式内"[^]"是取反查找的意思

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

3.3查找行首和行尾指定字符

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

以点结尾

在这里插入图片描述

3.4查询空白行
grep -n '^$' test.txt		#"^$"结合,需要查询空白行时,执行该命令即可显示出对应的行

在这里插入图片描述

3.5查找任意一个字符".“与重复字符”*"
正则表达式内"."表示任意字符
如下示例,
grep -n 'w..d' test.txt	 	#可以查找到'w'和'd'之间两位任意字符组成的行,以w开头,d结尾

在这里插入图片描述

重复符

grep -n 'ooo*' test.txt			#查询多个o字符的行

在这里插入图片描述

grep -n 'wo*d' test.txt 	#查询以w开头,d结尾,中间至少有一个o的字符行,

在这里插入图片描述

grep -n 'w.*d' test.txt		#查询以w开头,d结尾,中间字符任意可有可无的字符

在这里插入图片描述

grep -n '[0-9]*'	查询任意数字所在行

在这里插入图片描述

3.6查询两个字符的字符串
grep -n 'o\{2\}' test.txt		#只显示两个oo的字符行	

在这里插入图片描述

3.7查询以w开头d结尾,中间包含指定几个o的字符串
grep -n 'o\{2,5\}' test.txt	#查询以w开头d结尾的,中间包含2个o的字符串

在这里插入图片描述

三、cut、sort、uniq、tr

1.cut工具

cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段至标准输出,如果不指定File参数,cut命令将读取标准输入,必须指定-b、-c或-f标志之一

选项:
-b:按字节截取
-c:按字符截取,常用于中文
-d:指定以什么为分隔符截取,默认为制表符
-f:通常和-d一起
1.1分隔打印文件第一列

在这里插入图片描述

1.2分割打印文件第三列

在这里插入图片描述

1.3分割打印passwd第一列和第三列

在这里插入图片描述

1.4查看登录用户的第三个字节

在这里插入图片描述

1.5查看文件中的字符位置

-b分割字符,-c既可以分割字符也可以分割中文

在这里插入图片描述

2.sort排序工具

sort是一个以行作为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序,例如数据和字符的排序就不一样

sort [选项] 参数
常用选项
-t:指定分隔符,默认使用[Tab] 键或空格分隔
-k:指定排序区域,哪个区间排序
-n:按照数字进行排序,默认是以文字形似排序
-u:等同于uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
-r:反向排序,默认是升序,-r就是降序
-o:将排序后的结果转存至指定文件
-f:忽略大小写,会将小写的字母都转换为大写字母来进行比较
-b:忽略每行前面的空格
2.1加任何选项默认按第一列升序,字母按[a-z]由上至下显示

在这里插入图片描述

2.2以冒号作为分隔符,以数字大小对某一列进行排序(默认升序)

在这里插入图片描述

2.3冒号作为分隔符,以数字大小对指定列降序排序显示

在这里插入图片描述

2.4将输出结果不显示,输出到文件内

在这里插入图片描述

2.5去掉文件中重复行在这里插入图片描述
3.uniq:去重工具

去除连续的重复行


uniq [选项] 参数
-c:对重复的行进行计数
-d:仅显示重复行
-u:仅显示出现一次的行

3.1显示不重复的行

在这里插入图片描述

3.2统计重复出现行的次数

不连续的重复行不算做重复行

在这里插入图片描述

3.3仅显示重复出现的行

在这里插入图片描述

3.4结合sort排序,去重过滤

在这里插入图片描述

3.5查看统计登录用户

在这里插入图片描述

4tr修改替换
tr [选项] … SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出
常用选项:
-d 删除字符
-s 删除所有重复出现的字符,只保留第一个

4.1把文件内容a-z的小写替换成大写

在这里插入图片描述

4.2文件内容对应字母替换

文件内所有a字母换成p字母

在这里插入图片描述

4.3文件内容替换

替换字符不对等的情况下,相同字符识别后一个,未对应字符不识别的时候,以最后一个字符为准
在这里插入图片描述

4.4空字符替换

在这里插入图片描述

4.5删除字符

在这里插入图片描述

4.6删除换行字符

在这里插入图片描述

4.7删除重复的字符,并保留一个

在这里插入图片描述

总结

在本篇文章中,主要讲解了基础正则表达式元字符的用法,扩展正则表达式元字符的用法,grep命令的使用方法;以及文本处理器常用的小工具命令(cut、sort、uniq、tr)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell编程中的正则表达式是一种用于匹配和操作字符串的强大工具。它使用特定的语法规则来描述和匹配符合某个模式的字符串。在Shell编程中,常用的工具如grep、sed和awk都支持使用正则表达式模式匹配文本处理。正则表达式由普通字符和特殊字符(元字符)组成。普通字符指的是任意字母、数字或其他字符,而元字符具有特殊的意义和功能,用于表示模式中的特定字符或符号。通过使用正则表达式,可以实现字符串的匹配、替换、提取等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Shell编程正则表达式](https://blog.csdn.net/weixin_51099370/article/details/124568808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Linux操作系统——Shell编程 正则表达式](https://blog.csdn.net/weixin_46411355/article/details/125628828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值