shell编程------正则表达式

时间:2024-03-28 09:59:49

正则表达式介绍

正则表达式是一种文本模式匹配,包括普通字符和特殊字符,它是一种字符串匹配模式,可以用来检查一个字符串是否含有某种子串,将匹配的子串替换或者从某个字符串中取出某个条件的子串。

shell也支持正则表达式,但不是所有命令都支持正则表达式,常见的命令只有grep、sed、awk命令支持正则表达式。

示例:数据源 vim file

shell编程------正则表达式

特殊字符

^  锚定开头 ,^a表示以a开头,默认锚定一个字符

$ 锚定结尾,a$以a结尾,默认锚定一个字符

测试案例:egrep是增强版的grep命令,也支持正则表达式

      1> egrep "^ac$" file   精确匹配,匹配以a开头以c结尾的字符串

shell编程------正则表达式

      2> egrep "^a" file   模糊匹配,匹配以a开头的字符串

shell编程------正则表达式

匹配符:匹配字符串

.   匹配除回车以外的任意字符

()  字符串分组

[ ]   定义字符串,匹配括号中的一个字符

[^]   表示否定括号中出现字符类中的字符,取反

\      转义字符

|      或者

测试案例

1> egerp "^a.c$" file    匹配以a开头,c结尾,中间任意一个字符的字符串 

shell编程------正则表达式

2> egrep "^a[0-9]c$" file  匹配以a开头,c结尾,中间任意一个0-9的数字的字符串

shell编程------正则表达式

3> egrep "^a[^0-9]c$" file  匹配以a开头,c结尾,中间任意一个不为0-9的字符的字符串

shell编程------正则表达式

4> 往file中先添加一个数据源 a*c  echo a*c >> file

egerp "^a\*c$" file 表示匹配a*c

shell编程------正则表达式

 5> egrep "^(a|b)c$" file   表示匹配以a或者b开头,以c结尾的字符串

shell编程------正则表达式

限定符:对前面的字符或者字符串中做限定说明

*   某个字符之后加星号表示该字符不出现或者出现多次

? 与星号相似,表示该字符出现一次或者不出现

+  与星号相似,表示其前面字符出现一次或者多次,但是必须出现一次

{n,m}  某个字符之后出现,表示这个字符至少出现n次,最多出现m次

{m}  正好出现了m次

测试案例

1> egerp "^ab*c$" file   表示匹配以a开头,以c结尾,中间b出现0次或者多次的字符串

shell编程------正则表达式

2> egrep "^ab?c$" file

shell编程------正则表达式

3> egrep "^ab+c$" file

shell编程------正则表达式

4> egrep "^ab{2,5}c$" file 

shell编程------正则表达式

5> egrep "^ab{3}c$" file

shell编程------正则表达式

POSIX特殊字符

[:alnum:]   匹配任意字母字符0-9 a-z A-Z

[:alpha:]    匹配任意字符、大写或小写

[:digit:]      数组0-9

[:graph:]    非空字符(非空格控制字符)

[:lower:]     小写字母a-z

[:upper:]     大写字符A-Z

[:cntrl:]        控制字符

[:print:]        非空字符(包括空格)

[:punct:]      标点符号

[:blank:]      空格和TAB字符

[:xdigit:]      16进制数字

[:space:]      所有空白字符(新行、空格、制表符)

注意:[[ ]]  双中括号的意思,第一个中括号是匹配符[ ],匹配中括号中任意一个字符,第二个[ ]是格式,如[:digit:]。

测试案例:

1> egrep "^a[[:alnum:]]c$" file

shell编程------正则表达式

 2> egrep "^a[[:upper:]]c$" file

shell编程------正则表达式

3> egrep "^a[[:lower:]]c$" file

shell编程------正则表达式

4> egrep "^a[[:digit:]]c$" file

shell编程------正则表达式

5> egrep "^a[[:lower:]]*c$" file

shell编程------正则表达式

学习视频: 

https://www.bilibili.com/video/BV1vE41127wm?p=24

https://www.bilibili.com/video/BV1vE41127wm?p=25