正则表达式

一、正则表达式介绍

正则表达式(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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇的海马体

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值