目录
一、概述
正则表达式由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符,使用正则表达式后面一般要跟上" "。
正则表达式被很多命令程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等。
二、基本正则表达式
1、元字符
元字符不表示本来的含义,在正则表达式中有特殊含义的字符,用来表示控制或统配的功能。
. 匹配任意单个字符,可以是一个汉字 ,也可以是空格。例:grep "r..t" /etc/passwd
[ ] 匹配指定范围内的任意单个字符。
[ ^ ] 匹配指定范围外的任意单个字符,示例:[^zhou]
2、表示次数
* 匹配*前面字符的任意次,包括0次到无数次
.* 匹配任意长度的任意字符,不包括0次
\? 匹配其前面的字符出现0次或1次,表示可有可无
\+ 匹配其前面的字符出现至少1次,即>=1
\{n\} 匹配前面的字符n次
\{n,m\} 匹配前面的字符至少n次,至多m次
\{,m\} 匹配前面的字符至多m次,即<=m
\{n,\} 匹配前面的字符至少n次,即>=n
3、位置锚定
^ 表示行首锚定,用于最左侧
$ 表示行尾锚定,用于最右侧
^PATTERN$ 用于匹配整行,例:^bash$表示这一行只有bash才能匹配出,包含空格也不行
^$ 表示空行
^[[:space:]]*$ 表示空白行
\< 或 \b 匹配字符串词首,用于单词的左侧
\> 或 \b 匹配字符串词尾,用于单词的右侧
\bPATTERN\b 匹配整个单词
4、分组
用()括号将多个字符捆绑在一起,当作一个整体处理,如:(root)
\| 表示或者
三、拓展正则表达式
使用grep 命令时,默认不支持拓展正则表达式。使用grep -E 或者 egrop 才能支持拓展,作用是去掉部分\。
四、grep命令
grep命令格式 :grep [选项] ... 查找条件 目标文件
选项:
-m :匹配n行后停止
-v :取反
-i :忽略大小写
-n :显示匹配的行号
-c :只显示匹配的行数
-o :只显示匹配内容
-q :静默输出,不把匹配到的内容输出
-A :after,显示匹配内容的后n行
-B :before,显示匹配内容的前n行
-C :context,显示匹配内容的前后n行
-e :实现多个选项的逻辑或 关系
-w :匹配整个单词
-f :匹配两个文件的相同部分,以第一个文件匹配第二个文件
-r :递归,快速搜索目录
五、正则表达式实验
1、使用数组提取IP地址
2、表示qq号
3、表示邮箱
4、表示手机号