一、 什么是正则表达式
1.1 正则表达式简介
所谓正则表达式,实际上就是用来描述某些字符串匹配规则的工具,简单地说,正则表达式是对文本进行过滤的工具。而正则表达式之所以拥有过滤文本的功能,是因为它定义了一系列的元字符,通过元字符配合其他普通字符来表达出一种规则(匹配规则),只有符合该规则的文本才能保留下来。由于正则表达式语法简练、功能强大,得到了许多变成语言的支持,包括Java、C++、Perl以及Shell。
比如ls .txt。通常情况下,我们称“*”为通配符。当shell遇到该符号时,会将其解释为“任意的字符串”。与通配符类似,正则表达式也是用来匹配文本的,与之相比,正则表达式能够更加准确的描述用户的需求。
正则表达式在Unix和Linux中得到广泛的应用,常见支持正则表达式的Unix工具如下:
grep命令族:用于匹配文本行
sed流编辑器:用于编辑文本
awk:用于处理字符串的语言
掌握正则表达式,可以更好地利用这些工具。
解释:
字符 字母和数字
字符串 word 词
文本行 文件中的行
1.2 如何学习正则表达式
1)重点在于理解元字符
元字符在正则表达式中占核心地位,正则表达式最终是由元字符表达出来。理解和掌握元字符的涵义,才能达到灵活运用的地步。
2)掌握好正则表达式的语法
正则表达式之所以简练,是因为它有严格的语法。例如“*”它匹配该符号前面那一个普通字符出现0次或多次,也就是说,它的作用范围仅限于紧挨着该字符前面的一个字符。
二、基本正则表达式(Basic Regular Expression,BRE)
又称标准的正则表达式,是最早指定的正则表达式规范,其所定义的元字符主要有以下几种:
1、 行首定位符 “^”
2、 行尾定位符 “$”
3、 单个字符匹配 “.”
匹配任意单个字符,包括空格,但不包括换行符“\n”
4、 限定符 “*”
匹配其前导字符可以出现任意次数(0次或多次)
5、 字符集合匹配 “[]”
匹配方括号中任意一个字符 //例如:[abc]、[0-9]、[A-Z]
6、 字符集合不匹配 “[^]”
不匹配其中列出的任意字符
在示例之前,先来用sed删除空行:
[root@mha_master opt]# sed -i “/^$/d” regexp.txt
示例1:过滤出以字母“a”开头的行
[root@mha_master opt]# grep “^a” regexp.txt
示例2:过滤出以“C”结尾的行
[root@mha_master opt]# grep “C$” regexp.txt
示例3:过滤出总共有3个字符,该字符串以’a’开头,紧跟着第二个字符是“b”,第三个字符也是最后一个字符为“c”的行
[root@mha_master opt]# grep ‘^abc$’ regexp.txt
示例4:匹配以a开头,c结尾,中间为除了换行符之外的任意一个字符的行
[root@mha_master opt]# grep ‘^a.c$’ regexp.txt
示例5:匹配以d开头,d结尾,中间为除了换行符之外的任意两个字符的行
[root@mha_master opt]# grep ‘^d…d$’ regexp.txt //可以使用多个“.”匹配多个字符
示例6:匹配a和b之间没有s或者有多个s的行
[root@mha_master opt]# grep ‘^as*b$’ regexp.txt
示例7:匹配出字符串,该字符串只有三个字符且以字母