正则表达式:由一类【特殊字符】及文本【字符】所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。
字符分类:字符匹配、次数匹配、位置锚定、分组。
基本正则表达式:
- 字符匹配:
.:表示任意的【一个字符】
[]:表示匹配中括号内的【任意单个】字符
[^]:表示匹配中括号外的【任意单个】字符
- 次数匹配:
*:表示【其前字符】的任意次数
.*:表示任意长度的任意字符,相当于通配符的*
\?:表示匹配【其前字符】一次或零次(可有可无)
\+:表示【其前字符】出现至少一次
\{m\}:表示【其前字符】出现m次
\{m,n\}:表示【其前字符】出现至少m次,最多n次
位置锚定:
^:表示其后的字符位于行首
$:表示其前的字符位于行尾
\<或\b:词首锚定,用于单词模式的左侧
\>或\b:词尾锚定;用于单词模式的右侧
- 分组:
\(spring\):将搜索括号内的整个字符串
\1,\2,\3..:表示引用前面【第1,2,3..括号】搜索到的第一个字符【这是分组的意义所在,就是为了引用前面搜到的字符串,如果不需要引用,和没括号的结果一样】
[root@Centos7 ~]# grep -n "\(l..e\)" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -n "l..e" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -n "\(l..e\).*\1" f1
1:He love his lover.
2:She like her liker.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
扩展正则表达式:
- 字符匹配(和基本正则表达式一样):
.
[]
[^]
- 次数匹配(与基本正则表达式相比少了“\”):
*
?
+
{m}
{m,n}
- 位置锚定(与基本正则表达式一样):
^
$
\< \b
\> \b
- 分组(与基本正则表达式相比少了“\”)
(spring)
或(基本正则表达式没有这功能)
C|cat:表示C、cat
(C|c)at :表示Cat
grep [OPTIONS] PATTERN [FILE...]:使用基本正则表达式定义的模式来过滤文本的命令
-i:忽略大小写搜索
-o:只显示搜索到的内容
-v:不显示搜索到的内容
-n:显示行号
-E:以扩展正则表达式定义的模式搜索
-A #:把匹配到的行以及其后#行内容一同显示
-B #:把匹配到的行以及其前#行内容一同显示
-C #:把匹配到的行以及其前后#行内容一同显示
-e:实现多个选项间的逻辑or关系【相当于扩展正则表达式的‘|’】
[root@Centos7 ~]# grep -En "l(ove|ike)" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -e 'like' -e 'love' f1
He love his lover.
She like her liker.
He like his lover.
He love his lover and liker.
She like her liker and liker.
He like his lover and like.