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

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

文章目录

  • Shell编程之正则表达式与文本处理器
      • 一、正则表达式
        • 1.正则表达式定义
        • 2.基础正则表达式字符
        • 3.扩展正则表达式元字符
      • 二、grep
        • 1.grep常用选项
        • 2.grep案例
          • 2.1查找搜索字符
          • 2.2不区分大小写查找
          • 2.3取反查找
          • 2.4将带有空行文件写入到test.txt文件
        • 3.元字符
          • 3.1查找特定字符
          • 3.2多个参数查找内容
          • 3.3查找行首和行尾指定字符
          • 3.4查询空白行
          • 3.5查找任意一个字符"."与重复字符"*"
          • 3.6查询两个字符的字符串
          • 3.7查询以w开头d结尾,中间包含指定几个o的字符串
      • 三、cut、sort、uniq、tr
        • 1.cut工具
          • 1.1分隔打印文件第一列
          • 1.2分割打印文件第三列
          • 1.3分割打印passwd第一列和第三列
          • 1.4查看登录用户的第三个字节
          • 1.5查看文件中的字符位置
        • 2.sort排序工具
          • 2.1加任何选项默认按第一列升序,字母按[a-z]由上至下显示
          • 2.2以冒号作为分隔符,以数字大小对某一列进行排序(默认升序)
          • 2.3冒号作为分隔符,以数字大小对指定列降序排序显示
          • 2.4将输出结果不显示,输出到文件内
          • 2.5去掉文件中重复行![在这里插入图片描述](https://img-blog.csdnimg.cn/c99e62db172b48fd8c57cdf113024fc7.png)
        • 3.uniq:去重工具
          • 3.1显示不重复的行
          • 3.2统计重复出现行的次数
          • 3.3仅显示重复出现的行
          • 3.4结合sort排序,去重过滤
          • 3.5查看统计登录用户
        • 4tr修改替换
          • 4.1把文件内容a-z的小写替换成大写
          • 4.2文件内容对应字母替换
          • 4.3文件内容替换
          • 4.4空字符替换
          • 4.5删除字符
          • 4.6删除换行字符
          • 4.7删除重复的字符,并保留一个
      • 总结

引言:正则表达式,又称作规则表达式;正则表达式是对 字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式不只有一种,在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

Shell编程之正则表达式与文本处理器_第1张图片

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

在这里插入图片描述

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

Shell编程之正则表达式与文本处理器_第2张图片

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

Shell编程之正则表达式与文本处理器_第3张图片

3.元字符

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

Shell编程之正则表达式与文本处理器_第4张图片

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

grep -vn 'the' test.txt 

Shell编程之正则表达式与文本处理器_第5张图片

3.2多个参数查找内容

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

Shell编程之正则表达式与文本处理器_第6张图片
Shell编程之正则表达式与文本处理器_第7张图片

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

在这里插入图片描述
Shell编程之正则表达式与文本处理器_第8张图片

以点结尾

Shell编程之正则表达式与文本处理器_第9张图片

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

Shell编程之正则表达式与文本处理器_第10张图片

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

Shell编程之正则表达式与文本处理器_第11张图片

重复符

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

Shell编程之正则表达式与文本处理器_第12张图片

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

Shell编程之正则表达式与文本处理器_第13张图片

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

Shell编程之正则表达式与文本处理器_第14张图片

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

Shell编程之正则表达式与文本处理器_第15张图片

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

Shell编程之正则表达式与文本处理器_第16张图片

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

Shell编程之正则表达式与文本处理器_第17张图片

三、cut、sort、uniq、tr

1.cut工具

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

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

Shell编程之正则表达式与文本处理器_第18张图片

1.2分割打印文件第三列

Shell编程之正则表达式与文本处理器_第19张图片

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

Shell编程之正则表达式与文本处理器_第20张图片

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

Shell编程之正则表达式与文本处理器_第21张图片

1.5查看文件中的字符位置

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

Shell编程之正则表达式与文本处理器_第22张图片

2.sort排序工具

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

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

Shell编程之正则表达式与文本处理器_第23张图片

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

Shell编程之正则表达式与文本处理器_第24张图片

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

Shell编程之正则表达式与文本处理器_第25张图片

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

Shell编程之正则表达式与文本处理器_第26张图片

2.5去掉文件中重复行Shell编程之正则表达式与文本处理器_第27张图片

3.uniq:去重工具

去除连续的重复行


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

3.1显示不重复的行

Shell编程之正则表达式与文本处理器_第28张图片

3.2统计重复出现行的次数

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

Shell编程之正则表达式与文本处理器_第29张图片

3.3仅显示重复出现的行

Shell编程之正则表达式与文本处理器_第30张图片

3.4结合sort排序,去重过滤

Shell编程之正则表达式与文本处理器_第31张图片

3.5查看统计登录用户

Shell编程之正则表达式与文本处理器_第32张图片

4tr修改替换

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

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

Shell编程之正则表达式与文本处理器_第33张图片

4.2文件内容对应字母替换

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

Shell编程之正则表达式与文本处理器_第34张图片

4.3文件内容替换

替换字符不对等的情况下,相同字符识别后一个,未对应字符不识别的时候,以最后一个字符为准
Shell编程之正则表达式与文本处理器_第35张图片

4.4空字符替换

Shell编程之正则表达式与文本处理器_第36张图片

4.5删除字符

Shell编程之正则表达式与文本处理器_第37张图片

4.6删除换行字符

在这里插入图片描述

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

Shell编程之正则表达式与文本处理器_第38张图片

总结

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

你可能感兴趣的:(正则表达式,linux,unix)