正则表达式
Linux Shell以一串字符作为表达式向系统传达意思。元字符是用来阐释字符表达式意义的字符,简言之,元字符就算描述字符的字符,它用于对字符表达式的内容、转换以及各种操作信息进行扫描。正则表达式是由一串字符和元字符构成的字符串,简称RE。正则表达式的主要功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。1."*"符号
"*"符号用于匹配前面一个普通字符的0次或多次重复,如:
hel*o
"*"符号前面的普通字符是l,*字符就表示匹配l字符0次或多次,如字符串helo(0次)、hello(1次)、helllllo(多次)都可以由hel*o来表示。
2."."符号
"."符号用于匹配任意一个字符,如:
...73.
由于"."符号只能匹配一个字符,因此,上述字符串表是前面三个字符为任意字符,第4个和第5个字符是7和3,最后一个字符为任意字符,如abc731、def73a都能匹配上述字符串。"."符号也可以匹配一个空格,因此,a c731、ui 73e也能匹配上述字符串。
3."^"符号
"^"符号用于匹配行首,表示行首的字符是"^"字符后面的那个字符,如
^cloud
这表示匹配以cloud开头的行。
举例:
^...X86*
该字符串表示行首的三个字符为任意字符(可以是空格),第4~6个字符为X86,第7个字符开始可以重复匹配6,如:866X866666、8 6X86都可以匹配上述字符串。
4."$"符号
"$"符号匹配行尾,"$"符号放在匹配字符之后,与"^"符号的功能和用法都相反,如:
micky$
该正则表达式表示匹配以micky结尾的所有行。一个特殊的正则表达式是匹配所有空行的表达式,为:
^$
该正则表达式既匹配行首,又匹配行尾,中间没有任何字符,因此,为空行。
^.$
匹配只包含一个字符的行。
5."[]"符号
方括号"[]"匹配字符集合,该符号支持穷举方法列出字符集合的所有元素,也支持使用"-"符号表示字符集合范围,表明字符集合范围从"-"左边字符开始,到"-"右边字符结束,如:
[0123456789] //匹配任意数字
[0-9] //匹配任意数字
[a-z] //匹配所有小写字母
[A-Z] //匹配所有大写字母
[b-p] //匹配小写字母b~p
如果"^"放在"[]"符号里面,就不再表示匹配行首了,而是表示取反符号,如:
[^b-d]
该正则表达式表示匹配不在b~d范围之内的所有字符,此时,符号"^"不再表示匹配行首,而是取反符号,不在b~d范围内的字符实际上涵盖了小写字母b、c和d之外的所有字符(包括其他字母、数字、空格等).
[A-Za-z] [A-Za-z]*
该正则表达式表示以任意一个字母开头,再以任意字母进行0次或任意次重复,实际上,这个正则表达式可以匹配任意英文单词。
6."\"符号
"\"符号是转义符,用于屏蔽一个元字符的特殊意义,即以字面含义来解释"\"符号后面的元字符,如:
\.
反斜杠后面的字符"."是元字符,经过转义后,"."不再表示任意一个字符,而是一个普通字符句号"."。
7."\<\>"符号
"\<\>"符号是精确匹配符号,该符号利用"\"符号屏蔽"<>"符号,如:
\<the\>
该正则表达式精确匹配the这个单词,而不匹配包含the字符的单词,如them、there、another等。
8."\{\}"
"\{\}"系列符号与"*"符号类似,都是表示前一个字符的重复。但是,"*"符号表示重复0次或任意次,而"\{\}"系列符号可以指定重复次数,"\{\}"系列符号包括以下三种形式。
(1) \{n\}:匹配前面字符出现n次。
(2) \{n,\}:匹配前面字符至少出现n次。
(3) \{n,m\}:匹配前面字符出现n~m次。
如:
JO\{3\}B //重复字符O3次
JO\{3,\}B //重复字符O至少3次
JO\{3,6\}B //重复字符O3~6次
[a-z] \{5\}
该正则表达式表示精确匹配5个小写英文字母。