文章目录

  • 一、正则表达式介绍
  • 二、特殊字符
  • 1、定位符
  • 2、匹配符
  • 3、限定符
  • 三、POSIX字符


一、正则表达式介绍

正则表达式(Regular Expression)是一种文本模式匹配,包括普通字符(例如,a - z 之间的字母)和特殊字符(称为"元字符")。就像数学公式一样,我们可以通过正则表达式,在海量的数据中获取我们自己想要的数据。

正则表达式,常被计算机语言广泛使用,比如:shell、php、python、java、js等!

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

# 测试数据:
ac
ab
abbc
abcc
abbbbc
acc
abc
asb
aa
cc
a_c
aZc
aAAAAc
a c
ABC

ccc

dddd
http:www
abababab
c c d
123
a3c
e*f

二、特殊字符

1、定位符

定位符使用技巧:字符 ^ 和 $ 同时使用时,表示精确匹配,只是用字符$或^ 表示模糊匹配!

定位符

说明

^

锚定开头 如:^a 匹配以a开头 默认锚定一个字符

$

锚定结尾 如:a$ 匹配以a结尾 默认锚定一个字符

< 或 \b

词首锚定,用于单词模式的左侧

> 或 \b

词尾锚定,用于单词模式的右侧

<PATTERN>

匹配完整单词

去除nginx配置文件空行

[root@shell zz]# egrep  -v  "^$" /usr/local/nginx/conf/nginx.conf

去除nginx配置文件空行和#

[root@shell zz]# egrep    "^$|#"  /usr/local/nginx/conf/nginx.conf

演示:

# 1、精确匹配 以a开头c结尾的字符
[root@shell zz]# grep -e "^ac$" test.txt 
ac

# 2、模糊匹配 以a开头字符
[root@shell zz]# grep -e "^a" test.txt 
ac
ab
abbc
abcc
abbbbc
acc
abc
asb
aa
a_c
aZc
aAAAAc
a c
abababab
a3c
a*c

2、匹配符

匹配符

说明

.

匹配除回车以外任意字符

()

字符串分组

[]

表示匹配括号中的一个字符

[^]

取反,表示不匹配括号中出现的字符

\

转义字符

|


演示:

# 1、匹配a开头c结尾 中间是任意一个字符
[root@shell zz]# grep -e "^a.c$" test.txt 
acc
abc
a_c
aZc
a c
a3c

# 2、匹配a开头c结尾 中间是a、b、c中的任意一个字符
[root@shell zz]# grep "^a[abc]c$" test.txt 
acc
abc

# 3、匹配a开头c结尾 中间字符不包括a、b、c字符
[root@shell zz]# grep "^a[^abc]c$" test.txt 
a_c
aZc
a c
a3c

# 4、匹配"e*f"  *号在正则又特殊意义 需要使用\转义字符进行转义
[root@shell zz]# grep -e "e\*f" test.txt

# 5、匹配a或b开头的字符
[root@shell zz]# egrep "^a|^b" test.txt 
ac
ab
abbc
abcc
abbbbc
acc
abc
asb
aa
a_c
aZc
aAAAAc
a c
abababab
a3c
bfsda

# 6、匹配a或b开头的字符 使用小括号分组
[root@shell zz]# egrep "^(a|b)" test.txt 
ac
ab
abbc
abcc
abbbbc
acc
abc
asb
aa
a_c
aZc
aAAAAc
a c
abababab
a3c
bfsda


# 注意 5和6使用grep命令需要使用转义符进行转义 如下:
grep -e "^\(a\|b\)" test.txt 
grep -e "^a\|^b" test.txt

3、限定符

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

限定符

说明

*

匹配前面的字符0次或任意次

\?

匹配前面的字符0次或一次,意味着可有可无

+

匹配前面的字符1次或任意次,意味着至少一次

{n,m}

匹配某个字符出现次数 表示最少n次,最多m次

{n}

匹配某个字符正好出现n次

{0,n}

匹配前面的字符至多n次

{m,}

至少m次

演示:

# 1、匹配a开头c结尾  中间b可有可无
[root@shell zz]# egrep "^ab*c$" test.txt 
ac
abbc
abbbbc
abc

# 2、匹配a开头c结尾  中间b只能出现一次,或者一次也不出现
[root@shell zz]# egrep "^ab?c$" test.txt 
ac
abc

# 3、匹配a开头c结尾  中间b至少出现一次,或多次
[root@shell zz]# egrep "^ab+c$" test.txt 
abbc
abbbbc
abc

# 4、匹配a开头c结尾  中间b正好出现2次

[root@shell zz]# egrep "^ab{2}c$" test.txt 
abbc


# 5、匹配a开头c结尾  中间b最少出现2次,最多出现5次
[root@shell zz]# egrep "^ab{2,5}c$" test.txt 
abbc
abbbbc

三、POSIX字符

特殊字符

说明

[[:alnum:]]

匹配任意字母字符0-9 a-z A-Z(不包括符号类型的)

[[:alpha:]]

匹配任意字母 大写或小写

[[:digit:]]

匹配数字0-9

[[:graph:]]

匹配非空字符(非空格 控制字符)

[[:print:]]

匹配非空字符

[[:upper:]]

匹配大写

[[:lower:]]

匹配小写

[[:cntrl:]]

匹配控制字符(如:tab)

[[:punct:]]

匹配标点符号

[[:blank:]]

匹配空格和tab键

[[:xdigit:]]

16进制数字

[[:space:]]

所有空白字符(新行、空格、制表符)

注意[ [ ] ]双括号地意思:第一个中括号是匹配符[] 表示匹配括号中任意一个字符,第二个[]是POSIX字符的固定格式

随机演示:

# 1、匹配任意字母字符
egrep "[[:alnum:]]" test.txt 

# 2、匹配任意字母 大写或小写
egrep "[[:alpha:]]" test.txt

# 3、匹配a开头c结尾中间是数字的
egrep "^a[[:digit:]].*c$" test

# 4、匹配非空字符(不匹配空格)
egrep  -v "[[:graph:]]" test.txt