正则表达式
时间:2008-04-23 来源:peitomb
正则表达式
表7-1 基本元字符集及其含义
-----------------------------------------------------------------
^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[] 只匹配[]内字符。可以是一个单字符,也可以是字符序列。可以使用-
表示[]内字符序列范围,如用[1-5]代替[12345]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有
特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
pattern\{n\} 只用来匹配前面pattern出现次数。n为次数
pattern\{n,\}m 只含义同上,但次数最少为n
pattern\{n,m\} 只含义同上,但pattern出现次数在n与m之间
-----------------------------------------------------------------
1.使用句点匹配单字符
eg1:匹配权限:
$ ls -l | grep ^...x..x..x
查询文件开头为u,g,o都为可执行的文件
eg2:模糊查询文件名
查询文件名为: M*il
$ ls -l | grep M*il
2.在行首以^匹配字符串或字符序列
eg1:匹配目录
$ ls -l | grep ^d
eg2:混合匹配,查询以名称comp**ing开头的文件
$ ls | grep ^comp..ing
3.在行尾以$匹配字符串或字符
eg1:以ail结尾的所有行
$ ls | grep ail$
4.使用*匹配字符串中的单字符或其重复序列
eg1:
$ ls | grep M*l
Mail
5.使用\屏蔽一个特殊字符的含义
特殊字符: $ . ' " * [ ] ^ | ( ) \ + ?
\.不认为反斜杠后面的字符是特殊字符,而是一个普通字符,即句点。
如果要在正则表达式中匹配以*.pas结尾的所有文件,如下:
\*\.pas
eg1:查询以.lic结尾的文件
$ ls | grep \.lic$
6.使用[]匹配一个范围或集合
匹配任意一个数字,简化
[0-9],当然可以[0123456789]
任意小写字母[a-z]
任意字母[a-zA-Z]
任意字母或数字[a-zA-Z0-9]
匹配所有单词:[a-zA-Z]*
注意:^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里的内容
[^a-zA-Z] 匹配任一非字母型的字符
[^0-9] 匹配任一非数字型的字符
7.使用\{\}匹配模式结果出现的次数
使用*匹配所有匹配结果任意次,但如果只要指定次数,就应使用\{\},此模式有三种形式,
pattern\{n\} 匹配模式出现n次
pattern\{n,\} 匹配模式出现最少n次
pattern\{n,m} 匹配模式出现n到m次之是,n,m为0-255中的任意整数
eg1: A\{2\}B 匹配字母A出现两次,并以B结尾
eg2: A\{4,\}B 匹配字母A至少出现4次,并以B结尾
结果可为AAAAB或AAAAAAB,但不能为AAAB
eg3: A\{2,4\}B 匹配字母A至少出现2-4次
经常使用的正则表达式
---------------------------------------------------------------
^USER$ 只包含USER的行
^[^l] 排除关联目录的目录列表 $ ls -l | grep ^[^l]
[.*0] 0之前或之后加任意字符
[^$] 空行
[^......$] 包括6个字符的行
[^.*$] 匹配行中任意字符串
[^0-9\$] 非数字或美元标识
[^0-9a-zA-Z] 非数字或字母
^.$ 以有一个字符的行
^\.[0-9][0-9] 以一个句点和两个数字开始的行
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 日期格式dd-mm-yyyy
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\} 匹配IP地址
[^.*$] 匹配任意行
---------------------------------------------------------------