Linux shell编程自动化运维, 正则表达式 详细解析

正则表达式

名词解释

正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。
在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式,
它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。

可以在这些工具里调用

被vim、sed、awk、grep调用

使用场景

mysql、oracle、php、python ,Apache,Nginx… 需要正则

元字符

定义

元字符是一类字符,它们表达的是不同于字面本身的含义


元字符分类

基本正则表达式元字符

基本正则表达式元字符
^         行首定位符
$         行尾定位符
.         匹配任意字符
*         匹配0到多个字符
.*        任意多个字符
[ ]       匹配指定范围内的一个字符
[ - ]     匹配指定范围内的一个字符,连续的范围
[ ^ ]     字符取反
\         用来转意元字符,脱意符
\<        词首定位符
\>        词尾定义符
()     匹配稍后使用的字符标签,使用的时候,记得用 \ 脱意,
x\{m\}     字符x重复出现m次       x\{5\}
示例☝☝           [root@localhost ~]# grep o 1.txt
                       love
                       loove
                       looove
                 [root@localhost ~]# grep "o\{3\}" 1.txt
                        looove
x\{m,\}     字符x重复出现m次以上    x\{5,\}
x\{m,n\}    字符x重复出现m到n次     
示例☝☝            [root@localhost ~]# egrep "o{4,5}" 1.txt 
                           oooo
                           ooooo
                           ioooo
                           ooooi
                           iooooi
                  [root@localhost ~]# egrep "o{5,5}" 1.txt 
                           ooooo

扩展正则表达式元字符

+          匹配1~n个前导字符
?          匹配0~1个前导字符
a|b       匹配 a|b 
()       组字符  不需要用转意符\
              [root@localhost ~]# egrep "loveable|rs" 1.txt 
                     rs
                     loveable
                     lovers
              [root@localhost ~]# egrep "love(able|rs)" 1.txt 
                     loveable
                     lovers
:% s/(172.16.130.)1/\15/    //"\1"为代替前面括号里面内容
:% s/(172.)(16.)1/\1\25/     //"\2"为代替前面第二个括号里面内容,以此类推

示例总结

grep  love  1.txt     找love
/^love/        以love开头
/love$/        以love结尾
/l.ve/         l开始,一个任意字符,ve结尾
/lo*ve/        l开始,零个或多个o,ve结尾
/[Ll]ove/      大L 或者小L 开头的  ove
/love[a-z]/    love最后一个小写字母
/love[^a-zA-Z0-9]/    love最后一个(不是字母或者数字),而是符号

/.*/              所有行
/^$/              空行
/^[A-Z]..$/       开头一个大写,最后2个任意字符
/^[A-Z][a-z ]*3[0-5]/       一个大写开头,0到多个小写或空格,3,最后是0-5的一个数字
/[a-z]*\./        0到多个小写字母,最后一个点
/^ *[A-Z][a-z][a-z]$/	            0到多个空格开头,一个大写,一个小写,再一个小写结尾
/^[A-Za-z]*[^,][A-Za-z]*$/      0到多个字母开头,非逗号,0到多个英文结尾
/\<fourth\>/      找个单词
/\<f.*th\>/       找单词
/5{2}2{3}\./      5两次2三次和一个点
/^[ \t]*$/        0到多个 ,空格或tab的行
/^#/              井号开头的行
/^[ \t]*#/        有0到多个,空格或者tab开头的行,的注释行
:1,$ s/\([Oo]ccur\)ence/\1rence/	            多个r
:1,$ s/\(square\) and \(fair\)/\2 and \1/	    换个位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值