1、正则表达式简介
使用正则时尽量加引号,用来匹配字符串(命令结果、文本内容)
正则的匹配模式,默认是贪婪模式,所有满足要求的都要。
编程语言支持高级正则表达式 grep、sed、awk、文本编辑器、IDE等
1.1 正则分类:
- 基本正则 (要加的////比较多)
- 扩展正则
- 高级正则 prel(我们目前阶段用不到)
man 7 可以查看正则更多的详细信息
1.2 基础和扩展的区别:
- 扩展正则中这些元字符可直接使用:
?+{}|() - 基础正则中这些元字符前 需要加反斜线转义:
?+{}|()
基础正则 要在前面加\反斜杠;扩展正则 不需要加\反斜杠。
1.3 正则在运维工作中的应用范围:
- 配置文件
- 程序脚本
- 命令输出结果
- 日志文件
1.4 搜索字符的两种方法:
- 精确匹配,不使用任何元字符,也就是不使用正则表达式
- 正则表达式搜索,正则表达式不难,但是可读性非常差
grep -E 、 sed -r 、 egrep 、 awk 都是扩展正则表达式
推荐使用grep -E
2、元字符
`基本正则:`
. 匹配任意单个字符
[^] 取反, ^在[]里的,代表是取反;不在[]里的代表是代表是开头
[] 指定范围内的任意单个字符,[wang]可以是w或者a或者n或者g
[ ] 空格
[.] 方括号里的点,就只是点,不能匹配为任意字符。
[:alnum:] 字母和数字
[[:alnum:]] 任意字母和数字
[:space:] 空格、制表符、换行符
[:blank:] 空白字符(空格和制表符)
[a-zA-Z] 大小写字母
[0-9a-zA-Z] 数字和字母,等价于 \w
[开始-结束] 从开始到结束,只能匹配单个
[3-59] 注意是3、4、5、9,也就是3-5,再加上9
[:punct:] 匹配所有标点符号
[:print:] 可打印字符
\w 等价于[_[:alnum:]],代表任意单词或数字或_,后面注意还有下划线!!
\d或 \D不要用,不支持!
`扩展正则:`
匹配],要把]放在第一位
匹配^,^不能放在第一位,放在第一位会认为是取反
匹配-,-不能放中间,因为会认为是...到...的意思
示例:
`1`
[root@localhost ~]#ls /etc/|grep rc[.0-6] // [.0-6] :代表是.或者1-6的范围。 [.]点在方括号里就代表是点,不是单个任意字符。
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
`2`
[root@localhost ~]# grep r..t /etc/passwd //..代表任意两个字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
`3`
[root@localhost ~]# echo abc |grep 'a.c' //.代表任意字符
abc
[root@localhost ~]# echo abc |grep 'a.c' //点前加反斜杠就是.
[root@localhost ~]# echo a.c |grep 'a.c'
a.c
[root@localhost ~]# echo abc |grep [a.c] //a或者.或者c
`4`
[root@localhost ~]# ls |grep '[^a-z].txt'
#显示非小写字母
`5`
[root@localhost ~]# echo "x.y"|grep "x[^abc]y"
x.y //取反,非a 非b 非c
[root@localhost ~]# echo "xay"|grep "x[^abc]y"
[root@localhost ~]#
3、量词
量词表示次数
量词写在字符串后面,代表该字符串出现的次数。
* 代表前面的字符出现任意次,范围是0-正无穷,属于贪婪模式
.* 代表任意长度的任意字符,不包括0
? 代表前面字符出现0次或1次
+ 1到正无穷
.+ 代表从1到正无穷个字符
[0-9]* 代表数字0到9 出现了正无穷次
{1,3} 代表1-3次
{1,} 代表1到正无穷
{,3} 代表0-3次
{3} 3次
[0-9]{3} 0-9出现3次
// 注意:通配符的?代表单个字符;正则的?代表0次或者1次
小拓展:怎么匹配邮箱?
echo "1403544456@qq.com" |grep -E "[0-9a-zA-Z]+@[0-9a-zA-Z]+.[a-zA-Z]+"
示例:
`1`
[root@localhost ~]# echo google |grep 'go{2}gle'
google //o出现2次
[root@localhost ~]# echo gooogle |grep 'go{2,}gle'
gooogle //o出现2次以上
[root@localhost ~]# echo goooooogle |grep 'go*gle' //表示0次到任意次
[root@localhost ~]# echo ggle |grep "go?gle"
ggle
[root@localhost ~]# echo gogle |grep "go?gle"
gogle //出现0-1次
4、位置锚定
意思是字符出现在什么位置
^ 开头,如果加方括号[^],就是取反的意思。
$ 结尾,bash$就是以bash结尾
<或者\b 字符串的开头
>或者\b 字符串的结尾
<[a-z] 小写字符开头的字符串
<a-z\ > 单个小写字母??????
(1|2|3) 1或2或3
^[[:space:]]*$ 空白行
// 注意:下划线是一个单词,属于单词的一部分,