目录
1. 正则表达式
1.1 正则表达式概述
REGEXP(Regular Expressions)由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容。
正则表达式被很多程序和开发语言所广泛支持,如vim,less,grep,sed,awk,nginx,mysql 等
正则表达式分两类:
基本正则表达式 BRE
扩展正则表达式 ERE
正则表达式引擎采用不同算法,检查处理正则表达式的软件模块,如:PCRE(Perl Compatible Regular Expressions)
1.2 基本正则表达式元字符
1、字符匹配
. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的任意单个字符,示例:[abcd] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,即取反。注意 ^ 在括号内,在括号外代表行首,示例:[^abcd]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z,a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
如
[root@c7-1 ~]#ll /etc/ | grep 'rc[.0-9]'
lrwxrwxrwx. 1 root root 11 9月 2 09:31 init.d -> rc.d/init.d
lrwxrwxrwx. 1 root root 10 9月 2 09:31 rc0.d -> rc.d/rc0.d
lrwxrwxrwx. 1 root root 10 9月 2 09:31 rc1.d -> rc.d/rc1.d
lrwxrwxrwx. 1 root root 10 9月 2 09:31 rc2.d -> rc.d/rc2.d
lrwxrwxrwx. 1 root root 10 9月 2 09:31 rc3.d -> rc.d/rc3.d
lrwxrwxrwx. 1 root root 10 9月 2 09:31 rc4.d -> rc.d/rc4.d
lrwxrwxrwx. 1 root root 10 9月 2 09:31 rc5.d -> rc.d/rc5.d
lrwxrwxrwx. 1 root root 10 9月 2 09:31 rc6.d -> rc.d/rc6.d
drwxr-xr-x. 10 root root 127 9月 2 09:32 rc.d
lrwxrwxrwx. 1 root root 13 9月 2 09:32 rc.local -> rc.d/rc.local
2、匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括 0 次
.* 任意长度的任意字符
\? 匹配其前面的字符 0 或 1 次,即:可有可无
\+ 匹配其前面的字符至少 1 次,即:>=1
\{n\} 匹配前面的字符 n 次
\{m,n\} 匹配前面的字符至少 m 次,至多 n 次
\{,n\} 匹配前面的字符至多 n 次,<=n
\{n,\} 匹配前面的字符至少 n 次
如
[root@c7-1 ~]#cat /etc/passwd | grep 'ro\{2\}'
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@c7-1 ~]#echo /etc | grep '/etc/\?'
/etc
[root@c7-1 ~]#echo /etc/ | grep '/etc/\?'
/etc/
3、位置锚定
位置锚定用于定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^$ 空行
^[[:space:]]*$ 空行或包含空白字符的行
^PATTERN$ 用于模式匹配整行
\< 或 \b 匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现
\> 或 \b 匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现
\<PATTERN\> 匹配整个单词
4、 分组
() 将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3,...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
如
\(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2
5、非打印字符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符