Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1373923
  • 博文数量: 112
  • 博客积分: 7112
  • 博客等级: 少将
  • 技术积分: 1299
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-31 16:27
文章分类

全部博文(112)

文章存档

2011年(19)

2010年(20)

2009年(16)

2008年(20)

2007年(37)

分类: LINUX

2007-06-06 11:43:44

正则表达式常用于文本过滤,它可以辅助grep awk sed这些工具来做相对应的匹配。

包括:匹配行首与行尾

 匹配数据集

 匹配字母或者数字

 匹配一定范围内的字符串集

 

^ 只匹配行首

 

$ 只匹配行尾

 

* 一个单字符后跟* ,匹配0或多个此单字符

 

[] 匹配[]内的字符,也可以是一个单字符,也可以是字符序列号。可以使用[1-5]来代替[12345]

 

\ 用来屏蔽一个元字符的含义,因为元字符在shell中有特殊含义。\可以来屏蔽这些元字符的特殊含义

 

. 任意单个字符

 

abc\{n\} 用来匹配前面abc出现的次数,n表示出现的个数

 

abc\{n,\} 匹配前面abc出现最少n

 

abc\{n,m\} 匹配前面abc出现nm

 

 

 

--------------------

M.Tansley 05/99 48311 Green 8 40 44

J.Lulu 06/99 48317 green 9 24 26

P.Bunny 02/99 48 Yellow 12 35 28

J.Troll 07/99 4842 Brown-3 12 26 26

L.Tansley 05/99 4712 Brown-2 12 30 28

-------------------

 

. 匹配任意单个字符

# grep ..T grade.txt  //匹配前2个是任意字符,第三个是T的行

 

^ 匹配行首

# ls –l | grep ‘^d’  //d开头的文件(目录)

# grep ‘^J’ grade.txt  //匹配以J开头的行

# grep ‘^L’.T grade.txt  //L开头第二个字符是任意字符第三个字符是T的行

 

$ 匹配行尾

# grep ‘$26’ grade.txt  //匹配行尾市26的行

# grep ‘^$’ grade.txt  //匹配空行

# grep ‘^.$’ grade.txt  //匹配一个字符

 

* 匹配字符串中的单个字符或重复序列

# grep ^.* grade.txt  //匹配任意字符

 

\ 使用屏蔽一个特殊字符的含义

有时需要查找一个字符或者字符串,而这些字符串中包含了特殊字符

特殊字符包括:

       $  .    “”  *  ^  [ ]  |  ( )  \  +  ?

如果我们要屏蔽这些特殊字符我们就要在这些特殊字符前面加上\

# echo “\”hello world\””

 

[] 匹配一个范围或者集合

[A-Z] [a-z] [0-9] [A-Za-z0-9]

# grep ‘^[A-Z]\.[T]’ grade.txt  \\匹配以大写字母开头第二个字符是点第三个字符是大写T的行

注意:

       如果^放在[]中表示否定或不匹配的内容

       # grep ‘^[A-Z]\.[^T]’ grade.txt

 

使用\{\}来匹配模式结果出现的次数

例:

       AB

       AAB

       AAAB

       AAAAB

       AAAAAB

A\{2\}B  //查看A出现2次并以B结尾的行

A\{2,\}B  //查看A出现最少2次并以B结尾的行

A\{2,4\}B  //查看A出现24次之间的以B结尾的行

 

例:

       1234XC9088

4523XX9001

0011XA9912

9931XC3445

[0-9]\{4\}.[C][0-9]\{4\} 

//匹配数字出现4

后跟一个任意字符,和一个大写C

再匹配数字出现4次的行

 

练习:

       写出一个匹配e-mail的正则表达式

 

 

 

grep和正则表达式的使用

grep允许使用国际字符模式:

       [:upper:] = [A-Z]

       [:lower:] = [a-z]

       [:digit:]] = [0-9]

       [:alnum:] = [0-9a-zA-Z]

       [:space:] = 空格或tab

       [:alpha:] = [A-Za-z]

 

egrep 代表extend grep egrep接受所有正则表达式,而且egrep可以以一个文件作为保存的字符串,然后将他传递给egrep egrep-f 参数来跟后面的文件

egrep –f f2 date.txt

阅读(1458) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~