正则表达式概述

是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如 sedgrep)普及开的。正则表达式通常缩写成“regex”


PCRE正则库

(Perl Compatible Regular Expressions中文含义:perl语言兼容正则表达式)是一个用C语言编写的正则表达式函数库,由菲利普.海泽(Philip Hazel)编写。PCRE是一个轻量级的函数库,PCRE十分易用,同时功能也很强大,性能超过了POSIX正则表达式库和一些经典的正则表达式库


开启pcre posix正则表达式支持,常用的有这三个指令grep,sed,awk

1grep –P =grep –E = egrep

2sed –r

3awk --posix


元字符

元字符

功能

示例

匹配对象

^

行首定位符

'^love'

匹配所有以love开关的行

$

行尾定位符

'love$'

匹配所有以love结尾的行

[]

匹配一组字符中的一个字符

'[Ll]'ove

匹配loveLove的行

[^]

匹配不在一组字符中的一个字符

'[^A-Z]ove'

匹配一个不在AZ之间的字符,并且该字符紧跟着是ove的行

.

匹配一个字符

'l..e'

匹配包含一个l,后跟两个字符,再跟一个e的行

x{m}

字符x的重复m

'o{5}'

匹配连续出现5o的行

x{m,}

字符x至少重复m

'o{5,}'

匹配连续出现至少5o的行

x{m,n}

字符x至少m,但不能超过n

'o{5,10}'

匹配连续出现至少5o,但不能超过10o的行

aa|bb

匹配aabb

love|hate

匹配lovehate这两个字符串之一

()

字符组

love(able|ly)(ov){1,}

匹配loveablelovely并且紧跟在其后ov的一次或多次出现.

并且将()中的内容放在寄存器中最左侧第一个叫做\1,后续再引用这个存在器中的内容可以使用\1,最多可以用9个寄存器\1 \2 ….\9.

*

匹配零个或多个前一个字符

' *love'

匹配包含零个或多个空格后有love的行





练习素材

[work@3server shell]$ cat datafile.txt

northwest       NW     Charles Main            3.0     .98    3       34

western         WE     Sharon Gray             5.3     .97    5       23

southwest       SW     Lewis Dalsass           2.7     .8     2       18

southern        SO     Suan Chin               5.1     .95    4       15

southeast       SE     Patricia Hemenway       4.0     .7     4       17

eastern         EA     TB Savage               4.4     .84    5       20

northeast       NE     AM Main Jr.             5.1     94     3       13

north           NO      Margot Weber            4.5     .89    5       9

central         CT     Ann Stephens            5.7     .94    5       13






正则表达式练习


范例1



范例2



范例3



范例4





范例5


范例6



范例7












范例8



范例9



范例10



范例11




范例12
















范例13








范例14


范例15




范例16


范例17


范例18







范例19  grep –P = grep –E = egrep


























范例20 (这个例子先了解一下即可,后续再学sed,awk)