目录
一、正则表达式的分类
1.基本正则表达式:
2.扩展正则表达式:
3.POSIX 字符:
4.特殊字符:
二、正则表达式的使用示例
1、字符匹配
(1).: 匹配任意单个字符
(2)[] : 匹配指定中括号范围内的任意单个字符
2、次数匹配
(1)*: 匹配前面的字符任意次(0 次或无数次)
(2)\?: 匹配前面的字符 0 次或 1 次
(3)+: 匹配前面的字符至少 1 次
(4)\{m\,}: 匹配前面的字符至少 m 次
(5)\{,n}: 匹配前面的字符最多 n 次——问题
(6)\{m,n\}: 匹配前面的字符至少 m 次,至多 n 次
(7).*: 匹配任意字符任意次数
3、位置锚定
(1)^: 行首锚定,用于模式最左边
(2)$: 行尾锚定,用于模式最右边
(3)\< 或 \b: 锚定词首,用于单词模式左侧
(4)\> 或 \b: 锚定词尾,用于单词模式右侧
4、分组引用
Basic Regular Expression 又叫 Basic RegEx 简称 BREs,在基本正则表达式中作用的元字符为:^ 、$、 . 、[、] 、* ;
Extended Regular Expression 又叫 Extended RegEx 简称 EREs,其为在基本正则表达式上新增了 (、) 、{ 、} 、?、 + 、等元字符,使得正则表达式更加简洁易用。
通用 POSIX 原字符如下:
[:alnum:] 字母数字[a-z A-Z 0-9]
[:alpha:] 字母[a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写 [A-Z]
[:xdigit:] 十六进制数字 [0-9 a-f A-F]
在扩展正则表达式中加上 \
则被认为其具有特殊含义:
\w 匹配任意数字和字母,等效[a-zA-Z0-9_]
\W 和\w相反,等效[^a-zA-Z0-9_]
\b 匹配字符串开始或结束,等效\<和\>
\s 匹配任意的空白字符
\S 匹配非空白字符
(1).
: 匹配任意单个字符[root@master reg]# cat test.txt
she
sh
s1e
[root@master reg]# grep "s.e" test.txt
she
s1e
[]
: 匹配指定中括号范围内的任意单个字符[root@master reg]# cat test.txt
she
sh
s1e
[root@master reg]# grep "s[a-z]e" test.txt
she
[root@master reg]# grep "s[1-9]e" test.txt
s1e
[root@master reg]# grep "s[[:alnum:]]e" test.txt // 匹配字符或数字
she
s1e
[root@master reg]# grep "s[[:alpha:]]e" test.txt
she
[root@master reg]# grep "s[[:digit:]]e" test.txt
s1e
中括号内可以利用元字符来表示。如下,匹配的元字符"^"取反,也就是不包含匹配的内容。
[root@master reg]# cat test.txt
she
sh
s1e
[root@master reg]# grep "s[^[:digit:]]e" test.txt
she
[root@master reg]# grep "s[^a-z]e" test.txt
s1e
次数匹配用在指定的字符后面,表示指定匹配到前面的字符出现多少次。
*
: 匹配前面的字符任意次(0 次或无数次)[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "s*" test2.txt
ssssh
sheee
hell // 匹配到0次也会查出来
\?
: 匹配前面的字符 0 次或 1 次[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "s\?" test2.txt
ssssh
sheee
[root@master reg]# grep -E "s?" test2.txt
ssssh
sheee
如上匹配 s 可以存在 0 次,或者存在 1 次之后需要有 h 字符,注意利用选项 -E
开启扩展正则表达式,相较于基本正则表达式不需要 \
。
+
: 匹配前面的字符至少 1 次[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "s\+h" test2.txt
ssssh # 匹配ssssh
sheee # 匹配sh
[root@master reg]# grep -E "s+h" test2.txt
ssssh
sheee
\{m\,}
: 匹配前面的字符至少 m 次[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "s\{1,\}" test2.txt
ssssh
sheee
[root@master reg]# grep -E "s{1,}" test2.txt
ssssh
sheee
[root@master reg]# grep "s\{2,\}" test2.txt
ssssh
[root@master reg]# grep -E "s{2,}" test2.txt
ssssh
\{,n}
: 匹配前面的字符最多 n 次——问题[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "s\{,2\}" test2.txt
ssssh
sheee
hell
[root@master reg]# grep -E "s{,2}" test2.txt
ssssh
sheee
hell
注:本次测试中,筛选结果并没有达到预期效果,本意是最多为2次筛选到结果,但实际上第3次匹配的结果也能查出来。
\{m,n\}
: 匹配前面的字符至少 m 次,至多 n 次[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "s\{1,2\}" test2.txt
ssssh
sheee
[root@master reg]# grep -E "s{1,2}" test2.txt
ssssh
sheee
.*
: 匹配任意字符任意次数(1)^
: 行首锚定,用于模式最左边[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "^s" test2.txt
ssssh
sheee
$
: 行尾锚定,用于模式最右边[root@master reg]# cat test2.txt
ssssh
sheee
hell
[root@master reg]# grep "h$" test2.txt
ssssh
\<
或 \b
: 锚定词首,用于单词模式左侧[root@master reg]# cat test2.txt
go root user
root:shell;gousers
hellorootgouser
[root@master reg]# grep "\
\>
或 \b
: 锚定词尾,用于单词模式右侧[root@master reg]# grep "gouser\b" test2.txt
hellorootgouser
[root@master reg]# grep "gouser\>" test2.txt
hellorootgouser
()
分组:将一个或多个字符当成一个整体来进行后续处理;1…数字
引用:从左侧起,引用第一个左括号以及与之匹配右括号之间的模式所匹配到的字符,后向引用,例如grep -E "(root).*\1" /etc/passwd
利用 () 将 root 引用起来,后面利用数字 1 引用。