一、为何使用正则表达式
给定一个正则表达式和另一个字符串,我们可以达到如下目的:
1)给定的字符串是否符合正则表达式的过滤逻辑(称作 匹配 )
2)可以通过正则表达式,从字符串获得我们想要的特定部分
3)取出文件中正确的身份证号码
4)帮助我们快速过滤
二、正则表达式分类
1/POSXI规范将正则表达式分为两种:
1)基本正则表达式(BRE,basic regular expression)
2)扩展正则表达式(ERE,extended regular expression)---高级功能
2、BRE与ERE区别:
1)仅仅是元字符不同:
BRE只承认的元字符有:^ $ . [] * 其他字符识别为普通字符。
ERE则添加了() {} ? + |等。
2) 只有在用反斜线“\”进行转义的情况下,字符() {} 才会被BRE当做元字符处理,
而ERE中,任何元字符前面加上反斜线都会被当做普通字符来出来。
三、正则与通配符
1、通配符
作用:查找文件名
支持的命令:Linux大部分命令都支持,以.txt结尾的文件
2、正则
作用:在文件中过滤内容
支持的命令:三剑客 sed,grep,awk python Java
四、使用正则表达式注意事项
1、正则神坑--中文符号
2、grep/egrep添加别名(CentOS 7 可不配置)
alisa grep='grep--color=auto'
alisa egrep='egrep--color=auto'
cat >> /etc/profile<<EOF
alisa grep='grep--color=auto'
alisa egrep='egrep--color=auto'
EOF
source /etc/profile
五、基础正则
正则表达式:为处理大量的字符串而定义的一套规则和方法,通过定义这些的特殊符号的辅助,系统管理员可以快速过滤,替换或输出需要的字符串。
1、^ 。。。开头
grep' ^I' oldboy.txt
过滤出以I开头的行。
2、$ 。。。结尾
grep'$m' oldboy.txt
过滤出以m结尾的行
3、^$ 行 -n显示行号
grep -n '^$' oldboy.txt
过滤出空行,并且显示出行号
4、. 任意一个字符,不会匹配空行
grep'.'oldboy.txt
显示所有字符,不包括空行
5、\ 转义字符,还原命令本来的含义
6、* 前一个字符连续出现了0次或0次以上(逐行匹配)
假如匹配0个的时候,实际就是 空 ,什么都是空的情况下默认匹配全文内容,然后在匹配大于0的情况
7、.* 所有内容:任何符号(包含空行)
例如: 匹配所有内容到0开头的内容
grep '^.0'
匹配结尾内容以m任意的所有内容
grep ‘.*m.$’
匹配任意开头且以!结尾的行
grep '^..*!$'
8、[]
1) [abc] 相当于是一个符号,匹配内容为a,b,c的行
2) [0-9] 匹配所有的数字字符
3)[a-z] 匹配所有的小写字母
4)[A-Z] 匹配所有的大写字母
5)[a-zA-Z] [a-Z] 匹配所有的字母
9、加[]不加[]的区别
加[]:括号内字符单个字符过滤
不加[]:整体过滤
10、[^abc] 相当于一个符号 过滤所有不包含a,b,c的行
六、扩展正则
1、+ 前一个字符连续出现1次或1次以上
2、| 或者
3、() 表示一个整体,反向引用
4、反向引用
sed 在 's#()#\1#g' 后两个#之间使用\1 引用前面括号的内容
5、{}
{n,m} 匹配其前面的字符至少n次至多m次
6、? 匹配前一个字符0次或1次