正则表达式的介绍

本文详细介绍了正则表达式的基础定义、种类,以及grep、sed和awk等工具的使用方法,重点讲解了元字符的作用,包括字符匹配、范围、否定、行前后显示、次数匹配和位置定位。还介绍了扩展正则表达式的区别和额外功能如次数匹配和或操作符。
摘要由CSDN通过智能技术生成

文章转载自
https://www.cnblogs.com/junhuiwang/p/11656735.html

1- 定义

1.1 正则表达式的基本格式

regular expression
作用
通过对文件中的内容进行过滤筛选,然后对文件的内容进行处理
经常用基于正则写脚本来处理日志文件

构成
一堆特殊符号和字母构成–元字符

1.2 正则表达式的种类

基本正则表达式
扩展正则表达式

2- 正则表达式的使用

通常会结合三个命令使用

2.1 grep

作用: 对文件中的内容进行逐行过滤
格式: grep [选项] 匹配内容 文件

选项:
1)无选项参数
从文件a.txt中过滤出包含root的行

grep root a.txt

2)-v:取反
文件a.txt中过滤出不包含root的行

grep -v root a.txt

3)-o:仅仅显示出所匹配到的内容
从文件a.txt中找出全部的root(只显示root)

grep -o root a.txt

4)--color:将匹配到的内容着色
5)-E:使用扩展正则表达式
6)-i: 忽略大小写
7)例子
从文件a.txt中统计root的个数

grep -o root a.txt | wc -l

2.2 sed

2.3 awk

3- 正则中的元字符

匹配单个字符

3.1 .(点) 表示任意一个字符

(可以是空格,逗号, 字母, 数字…)

3.2 [ ] 表示范围内的一个字符

3.2.1 用字母和数字的方式表示

[12345] 表示1 或2 或3 或4 或5

[1234567890] 表示 任意一个数字

[abc] 表示a 或b 或c

[a-z] 表示任意一个小写字母

[A-Z] 表示任意一个大写字母

[A-Z] 表示任意一个大写字母

[a-zA-Z] 表示任意字母

[0-9a-zA-Z] 表示所有数字和字母的任一个

例子:过滤出包含数字的行

grep [0-9] a.txt

3.2.2 用字符集的方式表示

[:space:] 表示一个空格

[:digit:] 表示0-9全部十个数字   //等价于 0123456789, 而不等价于[0123456789]

[[:digit:]] 表示任意一个数字

[:lower:] 表示全部26个小写字母

[:lower:] 等价于 abcdef....z

[[:lower:]] 表示任意一个小写字母

[[:upper:]] 表示任意一个大写字母

[[:alpha:]] 表示任意一个字母

[[:punct:]] 表示任意一个标点符号

[[:alnum:]] 表示任意一个数字和字母

补充

[[:digit:][:lower:]]   //表示任意一个数字或小写字母  即 [0123456789abcdefg.......z]
[[:space:][:digit:][:upper:]]   //匹配空格或者数字或大写字母

3.3 [^] 匹配范围以外的单个字符

例子:匹配没有数字1或者3 或7的行

   [^137]

例子:过滤出没有数字的行

   [^[:digit:]]

例子:过滤出没有数字和大写字母的行

   [^[:digit:][:upper:]]

3.4 显示匹配到的行的前后若干行

   -A n  显示匹配行后的N行

   -B n  显示匹配行前的N行

   -C n  显示匹配行前后的各N行

例子:从a.txt中过滤出包含数字2的行,同时显示该行下的3行内容

# grep -A3 "2" a.txt

3.5 次数匹配

   *   表示其前面的字符出现任意次数的情况(0,1,n)

   .*  表示任意长度的任意字符

   ?  表示其前面的字符出现最多一次的情况

   \{m,n\}   表示其前面的字符出现最少m次,最多n次的情况

          \{3,\} 其前面的字符出现表最少3次

          \{,5\} 其前面的字符出现表最多5次

例子:

a* 表示任意多个a(可以是0 ,1, n)
ab* 表示a后面的b出现任意多次

例子:过滤出包含字母a和b的行,要求a在前,b在后

   # grep "a.*b" fileName

例子:

   "a\{2,5\}b"

3.6 位置锚定

   ^  表示以什么为开头的行

   $  表示以什么为结尾的行

   \< 表示单词首部

   \> 表示单词尾部

   ^$ 表示空白行

例子:

   过滤出包含root的行

   # grep "root" a.txt

   过滤出以root为开头的行

   # grep "^root" a.txt

   过滤出以root为结尾的行

   # grep "root$" a.txt

   过滤出以空格为开头的行

   # grep "^[[:space:]]" a.txt

   过滤出以多个空格后面是root为开头的

   # grep "^[[:space:]]\{1,\}root" a.txt

3.7 分组

   \(  \)  将一个内容当做一个整体看待

   \1      表示引用前面的第一个分组

   \2      表示引用前面的第二个分组

例子: 从文件a.txt中,过滤出出现过两个相同数字的行

   # grep "\([[:digit:]]\).*\1" c.txt

4- 扩展正则表达式

4.1 基本正则

grep [选项] 匹配内容 文件

4.2 扩展正则

方式1:grep -E 匹配内容 文件

方式2:egrep 匹配内容 文件

主要多了两个元字符:

1.次数匹配

+:其前面的字符出现至少一次的情况效果等同于:{1,}

例子:匹配a前有至少一个b的行

  [root@localhost tmp]# egrep "b+a" a.txt

          或者

      [root@localhost tmp]# grep -E "b+a" a.txt

    2.或

    |

   例子:从文件a.txt中过滤出cat 和Cat

   # grep -E "(c|C)at" a.txt

   或者

   # grep -E "cat|Cat" a.txt

补充:

   在基本正则表达式中,? {} () 需要在前面使用 \ 进行转义

   在扩展正则表达式中是不需要的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值