正则表达式概述
是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如 sed和grep)普及开的。正则表达式通常缩写成“regex”。
PCRE正则库
(Perl Compatible Regular Expressions中文含义:perl语言兼容正则表达式)是一个用C语言编写的正则表达式函数库,由菲利普.海泽(Philip Hazel)编写。PCRE是一个轻量级的函数库,PCRE十分易用,同时功能也很强大,性能超过了POSIX正则表达式库和一些经典的正则表达式库
开启pcre 或 posix正则表达式支持,常用的有这三个指令grep,sed,awk
1,grep –P =grep –E = egrep
2,sed –r
3,awk --posix
元字符
元字符 | 功能 | 示例 | 匹配对象 |
^ | 行首定位符 | '^love' | 匹配所有以love开关的行 |
$ | 行尾定位符 | 'love$' | 匹配所有以love结尾的行 |
[] | 匹配一组字符中的一个字符 | '[Ll]'ove | 匹配love或Love的行 |
[^] | 匹配不在一组字符中的一个字符 | '[^A-Z]ove' | 匹配一个不在A到Z之间的字符,并且该字符紧跟着是ove的行 |
. | 匹配一个字符 | 'l..e' | 匹配包含一个l,后跟两个字符,再跟一个e的行 |
x{m} | 字符x的重复m次 | 'o{5}' | 匹配连续出现5个o的行 |
x{m,} | 字符x至少重复m次 | 'o{5,}' | 匹配连续出现至少5个o的行 |
x{m,n} | 字符x至少m次,但不能超过n次 | 'o{5,10}' | 匹配连续出现至少5个o,但不能超过10个o的行 |
aa|bb | 匹配aa或bb | love|hate | 匹配love或hate这两个字符串之一 |
() | 字符组 | love(able|ly)(ov){1,} | 匹配loveable或lovely并且紧跟在其后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
范例13
范例14
范例15
范例16
范例17
范例18
范例20 (这个例子先了解一下即可,后续再学sed,awk)