壳模糊匹配与正则的示例分析

  介绍

这篇文章将为大家详细讲解有关壳模糊匹配与正则的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>前言:

正则可以实现一些简单的功能,并用在脚本中,如检测ip地址是否符合规范,检测文件名是否符合规范等等。

<强>正则表达式

正则表达式主要是用来描述一个句法规则的模式。其实说的通俗一点,就是利用字符和元字符的组合,对一些符合既定句法的模式进行模糊匹配。它的主要功能是文本查询和字符串操作。

正则表达式的基本元素包括普通字符和元字符,在Linux shell里面,常用的正则表达式元字符集为:S={*,又是;^,美元,[],\,\ & lt; \祝辞,\ {\},\ {n, \},\ {n, m \}},每一个元字符都有自己在正则表达式中的含义、下面来介绍一下:

符“*”号:表示匹配前面一个普通字符0次或多次。注意这里是一个普通字符,即如果是乔* B的话,那么*就匹配字符“O”任意次,而不是匹配“乔”串。

"。“符号:表示匹配任意一个字符。字符”。“就表示一个字符,这个字符可以是任意字符。例如字符串……73年就表示前面3个字符为任意字符(包括空格),第4个和第5个字符分别是7和3。

" ^ "符号:表示匹配行首,例如:^云就表示匹配以云字符串开头的所有行。与上面匹配一个字符不一样,这里匹配的是后面跟着的整个字符串。

”“美元符号:表示匹配行尾,例如:云美元就表示匹配以云字符串结尾的所有行。结合上面的匹配行首,^ $表示匹配空行。

"[]“符号:表示匹配方括号里面的字符集中的一个例。如:数字0 - 9中的任意一个数字都满足[0 - 9]这个表达式。值得注意的是,当^放在[]里面的时候,^就不再表示行首,而是表示取反。如:[^ 7 - 9]则表示非7 - 9中的任意一个数字才满足这个表达式。

符“\”号:是转义字符。如果你写的正则表达式里面包括元字符,而你又想将它当做普通字符用的话,就要在前面加上转义符号“\“了,例如:\ $就表示一个普通字符”“美元。

" \ & lt; \祝辞“符号:表示精确匹配& lt;在内的字符,“\”是用来转义& lt;在这两个字符的,例如:\ & lt; \祝辞表示匹配包含“的”的行,由于精确匹配,所以,“他们”,“理论”这些单词所在的行并不会被匹配到。

" \{\}“符号:与“;*“类似,表示匹配前面的一个字符任意多次。但是" \{\}"可以指定重复的次数,如\ \{3}则表示重复前面的字符3次;\{3 \}表示重复前面的字符至少3次;\{3、5 \}表示重复3到5次,例如:乔\ \ {3}B则表示重复字符O三次,即JOOOB;乔\ {3 \}B则表示至少重复O三次,即JOOOB, JOOOOB等都符合;\{3、5 \}则匹配JOOOB, JOOOOB, JOOOOOB这几个字符串。

<强>通配符

初学的时候对于正则表达式和通配符的理解很模糊,两个都是可以进行模糊匹配的,到底什么时候用才是正则表达式,什么时候用是通配符呢?其实,我们登录系统之后,系统的bash shell并不支持正则表达式的,也就是说,我们如果使用bash shell的某些命令时使用正则表达式,外壳可能会认不出来,只有当我们使用类似grep、sed、awk等工具的时候才有效,所以,我们在使用bash shell的时候也想达到模糊匹配的目的的话,就要使用通配符了。

通配符是使用正则表达式的一些元字符来的,常用的元字符集:E={?,*,[],{},^}。不过,这个通配符的元字符意义跟正则表达式里面的不太一样例。如:

”*“字符不再表示匹配前面一个字符任意多次,而是表示任意位置的任意字符。例如:φ* ip,则可以匹配菲利普,菲利普philsaip等开始三个是φ和结尾两位是ip的任意字符。例如ls - l * .awk表示匹配以.awk结尾的所有文件,*表示任意长度任意字符组合。

“吗?“字符才表示任意一个字符。同正则表达式元字符的“。“

“{}”字符不需要转义。在{}表示的是表达式集合。如:ls - l {[a] * .awk, 0 ? .pem}则表示列出所有以a字符开头的.awk文件的和以0开头,后面接一个任意字符的.pem文件

“^“字符也不是表示行首,而是代表取反。

正则表达式和通配的应用环境上有些不一样,但是都能够达到模糊匹配的效果。在后面介绍到的使用grep、sed和awk等工具对于文件的查找以及各种操作中,正则表达式的匹配作用更加明显。

,范例:

检测文件名是否符合规范:

# !/bin/bash      红色=& # 39;033年\[31猴# 39;   绿色=& # 39;033年\[32猴# 39;      awk  & # 39; {printf (“% s", 0美元)}& # 39;,1美元,|,egrep “^ #[[数位:]]* -(文档使用unittest | | |味精伪代码-[^,]。*)“美元,祝辞,/dev/null  2祝辞,1      if [$ ?大敌;-ne  0,);   ,echo  -e “message  check  $ ${正常}{红}失败”;   exit  1   fi   ,echo  -e “message  check 成功{绿}{正常}“美元;   exit  0

壳模糊匹配与正则的示例分析