shell正则表达式基础

正则表达式是操作字符串的一种逻辑公式,他使用事先定义好的特殊字符和这些特殊字符所构成的一种组合。正则表达式规定一些特殊语法,用来表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。

如上面所说,正则表达式有三部分组成:字符类、数量限定符、位置限定符。下面详细举例说明。

1、字符类

. 匹配任意一个字符,比如下图所示food. 可以匹配fooda foodabcd

[ ] 匹配中括号中的任意一个字符,- 表示字符的范围,当然,你可以写任意字符。比如下图所示的[a-z]可以匹配a到z的所有字母

^ 可以匹配除了括号中的字符外的任意字符

[[:xxx:]]是grep工具预定义的一些命名字符,可以灵活使用

 

2、数量限定符

比如说,合法的邮箱地址,每一部分都可以有一个或者多个x字符,合法的IP地址每一部分可以有1-3个字符,等等

?紧跟在?前面的单元应匹配0次或者1次

+紧跟在+前面的单元应匹配1次或者多次

*紧跟在*前面的单元应匹配0次或者多次

{N}紧跟在{N}前面的单元应精确匹配N次,例如[1-9][0-9]{2}匹配100-999的整数

{N,}紧跟在它前面的单元应至少N次,例如[1-9][0-9]{2}匹配3位以上的整数

{,M}紧跟在它前面的单元应最多匹配M次,例如[0-9]{,2}表示最多匹配1次数字

{N,M}紧跟在它前面的单元匹配至少N次,最多M次,例如[0-9]{1,3}表示0-9数字至少匹配1次,最多匹配3次

 

3、位置 限定符

位置限定符(Anchor):描述各种字符类以及普通字符之间的位置关系,例如邮件地址分三部分,用普通字符@和.隔 开,IP地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述。

^匹配行首的位置

$匹配行末的位置

\<匹配单词开头的位置

\>匹配单词词尾的位置

匹配某个单词

\b匹配单词的开头或者结尾的位置

\B匹配非单词开头或者结尾的位置

 

4、特殊字符

\转义字符,普通字符转为特殊字符,特殊字符转为普通字符。比如我们上面看到的\<就代表开头,因为<是个普通字符;而\.就是把特殊字符.转为普通字符的. 例如去匹配IP地址的时候就需要用到

() 将正则表达式的一部分括起来组成一个单元,可以对整个单元来使用数量限定符。例如可以用来表示IP地址。(下图的例子的意思我翻译一下,就是以0到9的数字出现1次到3次,也就是1到3位数嘛,并且后面跟着一个小数点.以这个为整体,用括号括起来,出现了3次。然后以0-9的3位数结尾的一组数字)

|连接2个子表达式,表示或的关系。例如使用^h|^H来匹配hello或者Hello

此条目发表在shell分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注