正则表达式
元字符 | 含义 |
---|---|
^ | 只匹配行首 |
$ | 只匹配行尾 |
* | 只一个单字符后紧跟*,匹配0个或多个此单字符 |
[ ] | 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用 - |
\ | 只用来屏蔽一个元字符的特殊含义。因为有时在 s h e l l中一些元字符有特殊含义。\可以使其失去应有意义 |
. | 只匹配任意单字符 |
p a t t e r n \ { n \ } | 只用来匹配前面p a t t e r n出现次数。n为次数 |
p a t t e r n \ { n,\ } m | 只含义同上,但次数最少为 n |
p a t t e r n \ { n,m \ } | 只含义同上,但p a t t e r n出现次数在n与m之间 |
1.使用句点匹配单字符
句点“.”可以匹配任意单字符。例如,如果要匹配一个字符串,以 b e g开头,中间夹一个
任意字符,那么可以表示为 b e g . n,“.”可以匹配字符串头,也可以是中间任意字符。
在ls -l命令中,可以匹配一定权限:
. . . x . . x . . x
此格式匹配用户本身,用户组及其他组成员的执行权限。
假定正在过滤一个文本文件,对于一个有 1 0个字符的脚本集,要求前 4个字符之后为X C,
匹配操作如下:
. . . .X C. . . .
以上例子解释为前4个字符任意,5,6字符为X C,后4个字符也任意,按下例运行:
注意,“.”允许匹配A S C I I集中任意字符,或为字母,或为数字。
2.在行首以^匹配字符串或字符序列
^只允许在一行的开始匹配字符或单词。例如,使用 ls -l命令,并匹配目录。之所以可以这样做是因为ls -l命令结果每行第一个字符是 d,即代表一个目录。
回到脚本(1),使用^ 0 0 1,结果将匹配每行开始为0 0 1的字符串或单词:
可以将各种模式结合使用,例如:
^ . . . 4 X C . . . .
结果为:
以上模式表示,在每行开始,匹配任意 3个字符,后跟4 X C,最后为任意4个字符。^在正
则表达式中使用频繁,因为大量的抽取操作通常在行首。
在行首第4个字符为1,匹配操作表示为:
^ . . . 1
结果为:
行首前4个字符为c o m p,匹配操作表示为:
^ c o m p
假定重新定义匹配模式,行首前 4个字符为c o m p,后面紧跟两个任意字符,并以 i n g结尾,
一种方法为:
^ c o m p . . i n g
以上例子太明显了,不是很有用,但仍讲述了混合使用正则模式的基本概念。
3.在行尾以$匹配字符串或字符
可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。假定要匹配以
单词t r o u b l e结尾的所有行,操作为:
t r o u b l e $
类似的,使用1 d $返回每行以1 d结尾的所有字符串。
如果要匹配所有空行,执行以下操作:
^ $
具体分析为匹配行首,又匹配行尾,中间没有任何模式,因此为空行。
如果只返回包含一个字符的行,操作如下:
^ . $
不像空白行,在行首与行尾之间有一个模式,代表任意单字符。
如果在行尾匹配单词j e t 0 1,操作如下:
j e t 0 1