shell编程之正则表达式

王朝学院·作者佚名  2016-05-26
窄屏简体版  字體: 小  |  中  |  大  |  超大  

shell编程之正则表达式什么是正则表达式?正则表达式是用于描述字符排列和匹配模式的一种语法规则。在很多程序设计语言中都支持利用正则表达式来进行字符串的操作,不同语言中的正则表达式略有不同,但是毕竟都是正则,其本质思想都是一致的,当我们掌握了shell中的正则后,再去看python或者perl里面的正则表达式时,会发现其实都是一样的东东。

在shell的一些命令中,有些并不支持正则表达式,但是它们支持linux里面的通配符,那么通配符又是什么东东呢,它跟正则表达式又有什么关系?

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令都支持正则表达式。通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

通配符主要是下面三个:

*

匹配任意字符

?

匹配任意一个内容

[]

匹配中括号中的一个字符

首先,正则表达式是用来匹配文件中文本的字符串,而通配符是用来匹配符合条件的文件名;其次正则表达式是包含匹配,只要包含正则中的字符串,就匹配,而通配符是完全匹配,也就是说,必须要与条件中的字符串一模一样才会匹配。

说了这么多,其实正则表达式主要用于字符串的模式分割、匹配、查找及替换操作,下面来关注一下正则表达式基本的元字符和它的作用。

元字符

作用

举例说明

*

前一个字符匹配0次或者任意多次

"a*"匹配所有内容,包括空白行"aa*"匹配至少包含一个a的行"aaa*"匹配最后包含两个连续a的字符串"aaaaa*"匹配最少包含4个连续a的字符串

.

匹配除了换行符外的任意一个字符

"s..d"匹配在s和d这两个字母之间一定有两个

字符的单词"s.*d"匹配在s和d字母之间有任意字符".*"匹配所有内容

^

匹配行首

"^hello"匹配以hello开头的行"^M"匹配以大写“M”开头的行

$

匹配行尾

"hello$"匹配以hello结尾的行"n$"匹配以小写“n”结尾的行"^$"匹配空白行

[]

匹配中括号中指定的任意一个字符,只匹配一个字符

"[aeiou]"匹配任意一个元音字母,"[0-9]"匹配任意一位数字,"[a-z][0-9]"匹配小写字母和一位数字构成的

两位字符。"s[ao]id"匹配s和i字母中,要么是a,要么是o

"[0-9]"匹配任意一个数字

"^[a-z]" 匹配小写字母开头的行

[^]

匹配中括号的字符以外的任意一个字符

"[^0-9]"匹配任意一位非数字字符,"[^a-z]"表示任意一位非小写字母"^[^a-z]"匹配不是小写字母开头的行"^[^a-zA-Z]"匹配不是字母开头的行

\

转义符。用于将特殊符号的含义取消

"\.$"匹配使用"."结尾的行

\{n\}

表示其前面的字符恰好出现n次

"[0-9]\{4\}"匹配4位数字,"[1][3-8][0-9]\{9\}"匹配手机号码"a\{3\}"匹配a字母连续出现3次的字符串"[0-9]\{3\}"匹配包含连续的3个数字的字符串

\{n,\}

表示其前面的字符出现不小于n次

"[0-9]\{2,\}"表示两位及以上的数字。"[0-9]\{3,\}[a-z]"匹配最少用连续3个数字开头

的字符串

\{n,m\}

表示其前面的字符至少出现n次,最多出现m次

"[a-z]\{6,8\}"匹配6到8位的小写字母。"sa\{1,3\}i"匹配在字母s和i直接有最少一个a,

最多三个a

下面举几个个简单的列子:

(1)匹配日期格式YYYY-MM-DD "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"(2)匹配ip地址XXX.XXX.XXX "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

(3)匹配腾讯QQ号码 "[1-9][0-9]\{4,9\}"

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航