Day 35 正则表达式

shell正则

作者:行癫(盗版必究)


一:正则

1.正则介绍

​ 正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符

​ 在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式

​ 它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念

​ 重要的文本处理工具:vim、sed、awk、grep

​ 重要的应用软件:mysql、oracle、php、python、Apache、Nginx …

案例:

匹配数字:       ^[0-9]+$                                       123 456 +表示前面的内容出现多次
匹配Mail: 	 [a-z0-9_]+@[a-z0-9]+\.[a-z]+	     			xingdian131420@126.com
匹配IP:		 [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}           {1,3}数字出现1-3次
[root@xingdian ~]# egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/sysconfig/network-scripts/ifcfg-eth0 
IPADDR=172.16.100.1
NETMASK=255.255.255.0
GATEWAY=172.16.100.25
2.元字符

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

​ shell元字符(也称为通配符)

​ 正则表达式元字符

案例:

[root@xingdian ~]# rm -rf *.pdf

[root@xingdian ~]# grep 'abc*' /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
3.正则表达式元字符

基本正则表达式元字符:

元字符					功能									示例		
^					行首定位符							    ^love	
$					行尾定位符							    love$		
.					匹配单个字符							    l..e		
*					匹配前导符出现0到多次				    	lo*ve可以匹配:lve,love,loove...
.*                  任意多个字符
[]					匹配指定范围内的一个字符				    [lL]ove
[ - ]				匹配指定范围内的一个字符					[a-z0-9]ove
                                                            [a-Z]匹配所有英文字母(a-z,A-Z)
                                                            
[^]				    匹配不在指定组内的字符						 [^a-z0-9]ove
\					用来转义元字符						     love\.	
\<			        词首定位符							     \<love   以love开头						
\>				    词尾定位符							     love\>	  以love结尾	

\b                  单词边界符                                \bcat\b 
                                                            只匹配cat独立单词,例如copycat,category就不会被匹配
                                                            \bcat 
                                                            匹配以cat开头的独立单词,例如cat,category
                                                            cat\b
                                                            匹配以cat结尾的独立单词,例如cat,copycat
                                                            
\(..\)				匹配稍后使用的字符的标签	    			:% s/172.16.130.1/172.16.130.5/
															:% s/\(172.16.130.\)1/\15/
															:% s/\(172.\)\(16.\)\(130.\)1/\1\2\35/
															:3,9 s/\(.*\)/#\1/	
																	
x\{m\}			    字符x重复出现m次					    	o\{5\}
x\{m,\}		        字符x重复出现m次以上			   			o\{5,\}						
x\{m,n\}		    字符x重复出现m到n次					    o\{5,10\}		

扩展正则表达式元字符:

+					匹配一个或多个前导字符			[a-z]+ove	
?					匹配零个或一个前导字符			lo?ve	
a|b					匹配a或b					    love|hate
()					组字符						loveable|rs    love(able|rs)  ov+ (ov)+
(..)(..)\1\2	    标签匹配字符				   (love)able\1er
x{m}			    字符x重复m次					o{5}		
x{m,}				字符x重复至少m次			    o{5,}
x{m,n}		    	字符x重复m到n次			    o{5,10}

一个正则表达式可以包含多个\(组\),按位置顺序对组进行编号,使用 \1 \2 \3 …来调用组组内的内容是固定不变的,但是可以对调组的位置,组外的内容可以更换

4.正则匹配示例
/love/				
/^love/
/love$/
/l.ve/
/lo*ve/
/[Ll]ove/
/love[a-z]/
/love[^a-zA-Z0-9]/

/.*/
/^$/
/^[A-Z]..$/	
/^[A-Z][a-z ]*3[0-5]/	
/[a-z]*\./	
/^[A-Z][a-z][a-z]$/	
/^[A-Za-z]*[^,][A-Za-z]*$/	
/\<fourth\>/		
/\<f.*th\>/	
/5{2}2{3}\./
5{2}  
空行
/^$/
5.正则案例
#!/bin/bash
read -p "please input number:" num
if [[ ! "$num" =~ ^[0-9]+$ ]]
then
    echo "error number!"
else 
    echo "is number!"
fi
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值