对于 2 + 4 算术表达式,2是(数字)字面值字符,+是操作符,而不能把+解释为普通字面字符,我们告诉计算机如何产生计算结果,而不是简单的告诉计算机返回6
关键术语:
1,(正则表达式),由字面值和元字符组成,描述了一种模式(pattern)或字符序列。
2,(元字符),元字符在正则表达式中有特殊的含义,就像2+4中的+符号一样,它不被用作字面值本身,而是表示一个操作符。元字符下辖两个基本的类型,例如 . 表示单个字符的元字符,而 * 表示如何修改前面的字符的元字符。
3,(字面值),除元字符外的任意字符,都被解释为只匹配它本身。
4,(字符类),在正则表达式中的有元字符 [ ] 括起来的字符集。
元字符汇总:
元字符 | 用途 |
. | 除换行符外,匹配任意单个字符;awk匹配任意单个字符,包括换行符,后同 |
* | 匹配任意个,在它前面的字符。(包括由正则表达式指定的字符) |
[....] | 匹配方括号中的字符类中的任意单个字符。如果方括号中的第一个字符为脱字符(^),则表示否定匹配。连字符(-)表示数字范围。注意,元字符(无需转义)在方括号内都变成字面值(awk中需转义)。 |
^ | 如果作为正则表达式的第一个字符,则表示匹配行的开始。 |
$ | 如果作为正则表达式的最后一个字符,则表示匹配行的结尾。 |
\{n,m\} sed,grep | 匹配它前面单个字符出现的次数(包括由正则表达式指定的字符)。 \{n\} 匹配n次,\{n,\} 至少匹配n次, \{n,m\} 匹配n到m之间的任意次数。 |
\ | 匹配转义随后的元字符。 |
\<love | 匹配包含以love开头的单词的行 |
love\> | 匹配包含以love结尾的单词的行,\<love\> 匹配含有love单词的行 |
+ | 匹配前面的单个字符(正则表达式的)一次或多次出现,等价 \{1,\} |
? | 匹配前面的单个字符(正则表达式的)零次或一次出现,等价 \{0,1\} |
| | 指定正则表达式的联合,如果某行匹配其中的一个正则表达式,那么它就匹配该模式。例如 $ grep '^dog|^pander' in_file 匹配in_file中以dog或pander开头的行。用单引号引住其中的模式,是为防止传递给shell解释。 |
() | 对正则表达式分组,例如 ’Lab(oratorie)?s’ ,匹配Labs,和Laboratories ; ‘compan(y|ies)’ ,匹配company,和companies; 注意大多数sed和grep不支持,但所有的awk及egrep版本都支持。 |
{n,m} awk,egrep | 匹配其前面的单个字符出现的次数(包括由正则表达式指定的字符)。 |
注:灰色部分,egrep和awk支持。
一些细节:
1,[字符类]中的特殊字符(注意限定在“字符类”范围内)。
字符 | 功能 |
\ | 在awk中,字符类中的元字符需转义。 在grep,sed中,字符类中的元字符自动作为字面值匹配。 |
- | 当它不在字符类中的第一个或最后一个位置时,表示的是一个范围。否则表示的是字面值本身。 |
^ | 仅当在字符类中的第一个位置时表示的是反转匹配。 |
2,^和$定位符的问题
在sed和grep中,只有^和$分别出现在正则表达式的开始和结尾才能发挥元字符的作用。在正则表达式的其它位置则会被当做字面值匹配。
在awk中,无论^和$定位符出现在正则表达式的哪个位置,它们总是发挥元字符的作用,要想使其作为字面值匹配,可用反斜杠转义。