【RHCA+】基本正则表达式
“ 目录:RHCA+ -> 4 正则表达式 -> 52 基本正则表达式 ”
POSIX基本正则表达式(BRE,Basic REGEXP)引擎
语法特点:在BRE中,元字符(如*、?、+、|、()等)在默认情况下不具有特殊含义,而是被当作普通字符处理。要使这些字符具有特殊含义,通常需要在它们前面加上反斜杠\进行转义。
用途:尽管功能相对有限,但BRE是许多早期Unix工具(如grep的默认模式)的基础。
字符 | 作用 |
a | 精准匹配字母a(其他字母同例) |
. | 任意单个字符,且只能是一个字符;不匹配空行 |
* | 匹配前一个字符零次或多次;默认贪婪模式:尽可能长地匹配 |
.* | 匹配任意字符出现任意次数 |
\? | 匹配前面的字符0或1次 |
\+ | 匹配前面的字符至少1次 |
[] | 匹配集合内单个字符,中括号内为集合 |
[a-z] | 匹配连续的字符串范围 |
[^] | 否;对中括号内的集合取反 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
^$ | 空行 |
^[[:space:]].*$ | 空白行 |
^PATTERN$ | 匹配整行 |
\< 或 \b | 词首锚定,\b放单词模式的左侧 |
\> 或 \b | 词尾锚定;\b放单词模式的右侧;例:\ |
\ | 匹配转义后的字符 |
\{n\} | 匹配前一个字符重复n次 |
\{n,\} | 匹配前一个字符至少重复n次 |
\{,n\} | 匹配前面的字符至多n次 |
\{n,m\} | 匹配前一个字符重复n到m次 |
\(\) | 将 \( 和 \) 之间的内容为一个分组存储到保留空间,最多存储9个 \n:通过 \1 到 \9 调用保留空间中存储的内容,反向引用 \1:表示从左侧起第1个左括号以及与之匹配右括号之间的模式所匹配到的字符 \2:表示从左侧起第2个左括号以及与之匹配右括号之间的模式所匹配到的字符,以此类推 \&:表示前面的分组中所有字符 |
[root@wuzuniao ~]# cat -n a.txt #创建文件
1 a
2 b
3 c
4 1
5 2
6 3
7 11
8 22
9 33
10 1a
11 2b
12 3c
13 dddd
[root@wuzuniao ~]# grep b a.txt #过滤包含字母b的行
b
2b
[root@wuzuniao ~]# grep d..d a.txt #过滤有四个字符的字符串,其中开头和结尾必须是字母d,中间两位任意字符
dddd
[root@wuzuniao ~]# grep --color 11* a.txt #过滤出至少包含一个1的行,第二个1可出现零次或多次
1
11
1a
[root@wuzuniao ~]# grep --color [3-5] a.txt #匹配包含数字3-5这个范围内的行
3
33
3c
[root@wuzuniao ~]# grep --color [c-d] a.txt #匹配包含字母c-d这个范围的行
c
3c
dddd
[root@wuzuniao ~]# grep --color ^b a.txt #匹配以b字母开头的行
b
[root@wuzuniao ~]# grep --color c$ a.txt #匹配以c字母结尾的行
c
3c
[root@wuzuniao ~]# grep --color 1[^$] a.txt #匹配以1开头,后续跟了其他字符的行;也就是这里把结束符排除掉了
11
1a
[root@wuzuniao ~]# grep --color 1[^1$] a.txt #匹配以1开头,后面不跟1和结束符的行
1a
[root@wuzuniao ~]# grep --color '3\{1,2\}' a.txt #匹配数字3出现过1次到2次的行
3
33
3c
[root@wuzuniao ~]# grep --color "\(2\).*\1" a.txt #匹配2出现2次的行;中间匹配任意字符,前后各匹配一次2
22
[root@wuzuniao ~]# grep --color "\(d\)\(d\).*\2\1" a.txt #匹配包含两个dd的行
dddd
[root@wuzuniao ~]# grep --color ^$ a.txt #匹配空白行
[root@wuzuniao ~]# grep -v --color ^$ a.txt #匹配非空白行;这里的--color参数也会取反,不显示颜色
a
b
c
1
2
3
11
22
33
1a
2b
3c
dddd
[root@wuzuniao ~]#