1. 扩展正则表达式
1.1 +(加号)
+ 表示前一个字符出现1次或1次以上
1.1.1 理解+
要求:取出文件内容连续出现的小写字母
[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt grep -E===egrepmy qq is 49000448not 4900000448.[root@oldboyedu50-lnb /oldboy]# grep -E '0+' oldboy.txtmy qq is 49000448not 4900000448.[root@oldboyedu50-lnb /oldboy]# grep '0\+' oldboy.txtmy qq is 49000448not 4900000448.[root@oldboyedu-50 oldboy]# egrep '[a-z]+' oldboy.txt 可以用[a-z]+显示单词 内容过多此处不粘贴[root@oldboyedu-50 oldboy]# egrep '[a-z]+' oldboy.txt -o -o显示查找过程amoldboy##[]与+连用 +会认为[]里面的是一个整体 所以显示为字符组
1.1.2 加+和不加+的区别
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt -o 加+号 连在一起的会一起显示00000000[root@oldboyedu50-lnb /oldboy]# egrep '0' oldboy.txt -o 不加+号 单独显示00000000
1.2 | 或者
1.2.1 理解 |
[root@oldboyedu-50 oldboy]# egrep 'oldboy|linux' oldboy.txt 查找文件中oldboy或者linux的内容I am oldboy teacher!I teach linux.my blog is http://oldboy.blog.51cto.comour size is http://blog.oldboyedu.com
1.2.2 | 的用法
排除文件中的#和空行
/etc/ssh/sshd_config 排除文件中的#和空行
[root@oldboyedu-50 ssh]# egrep -v '^$|#' sshd_config
1.3 () (小括号)
()表示一个整体 反向引用/后向引用
sed -r 使用扩展正则
思路:把你想要的内容保护起来 ()
sed 在 's###g' 后两个井号之间使用 \数字 引用
[root@oldboyedu-50 oldboy]# egrep 'oldb(o|e)y' oldboy.txt 此处表示查找oldboy和oldbey[root@oldboyedu-50 oldboy]# echo 123456|sed -r 's#(.*)#\1#g'123456[root@oldboyedu-50 oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'<123456>将123456 修改为12<34>56[root@oldboyedu-50 oldboy]# echo 123456|sed -r 's#(34)#<\1>#g'12<34>56点表示任意一个字符,\2表示第二个括号。[root@znix ~]# echo 123456|sed -r 's#(.).(..).(.)#\2#g'34
1.4 {}(花括号)
前一个字符至少连续出现了n次 最多连续出现了m次
1.4.1 大括号的不同方法
0{3,6} >=3 <=60{ 3} ==30{ 3,} >=30{,6} >=0 <=6
1.4.2 应用方法
[root@oldboyedu-50 oldboy]# egrep '[0-9X]{18}' id.txt 此处表示{}前面的字符出现了18次[root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt 表示0出现了最少出现3次最多出现4次my qq is 49000448not 4900000448.[root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt 表示0出现了3次my qq is 49000448not 4900000448.
1.4.3 {} 的用法
取出文件中的身份证号码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
[root@oldboyedu50-lnb /oldboy]# cat id.txt金 211324198705244720万 500224197105168312任 1231231231oldboy任 3oldboy任 lidao97303136098任 alex2197303136098任 350182197303oldgir吕 211282199209113038孔 150000198309176071邹 371001197412221284贺 130185200011215926杜 362522198711278101向 14052219961008852X[root@oldboyedu50-lnb /oldboy]# egrep '[0-9X]{18}' id.txt #表示0到9和x 一共出现了18次 这样查找不精确 因为单独一个数字出现18次 也可以筛选出来金 211324198705244720万 500224197105168312吕 211282199209113038孔 150000198309176071邹 371001197412221284贺 130185200011215926杜 362522198711278101 XXXXXXXXXXXXXXXXXX向 14052219961008852X[root@oldboyedu50-lnb /oldboy]# egrep '[0-9]{17}[0-9X]' id.txt 精确查找 但是还不是最精确的金 211324198705244720万 500224197105168312吕 211282199209113038孔 150000198309176071邹 371001197412221284贺 130185200011215926杜 362522198711278101向 14052219961008852X
1.5 ? (问号)
?前一个符号连续出现0次或1次 有或没有
?表示的信息0次或1次表示的内容和{0,1}其实是一样的
第2章 正则表达式坑
2.1 坑1 grep '0*'
会把文件内容都显示出来
0* 0次 没有 grep会把文件内容都显示出来
0次以上 0 00000000000
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
[root@znix ~]# grep "0*" clsn.txt 坑1 grep '0*' 会把文件内容都显示出来I am clsn teacher!I teach linux. I like badminton ball ,billiard ball and chinese chess!my blog is http://clsn.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448.my god ,i am not oldbey,but clsn![root@znix ~]# grep -o "0*" clsn.txt00000000
2.2 坑2 [oldboy]
[oldboy]查找的内容是o l d b o y 而不是oldboy整体
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
[root@oldboyedu50-lnb /oldboy]# grep '[oldboy]' oldboy.txt在此处oldboy查找的内容是o l d b o y 而不是oldboy整体I am oldboy teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my blog is http://oldboy.blog.51cto.comour size is http://blog.oldboyedu.commy qq is 49000448not 4900000448.my god ,i am not oldbey,but OLDBOY![root@oldboyedu50-lnb /oldboy]# grep -o '[oldboy]' oldboy.txt 显示查找过程oldboyllb
2.3 坑3 [^#^$] [^$] [^#$]
[]中 $ . 没有特殊含义 类似于\转义字符
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
[root@oldboyedu50-lnb /oldboy]# cat oldboy.txt 查看文件内容I am oldboy teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!+++++\\\\\\!!!!$$$$$$^^^####!!!^^^^^$$$$@@@@@####[root@oldboyedu50-lnb /oldboy]# grep '[^#^$]' oldboy.txt 此处表示排除#^$ 相当于去除了特殊含义I am oldboy teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!+++++\\\\\\!!!!$$$$$$^^^####!!!^^^^^$$$$@@@@@####[root@oldboyedu50-lnb /oldboy]# grep '\.$' oldboy.txt 此处表示查找以.结尾的I teach linux.not 4900000448.[root@oldboyedu50-lnb /oldboy]# grep '[.]$' oldboy.txt 此处也表示查找以.结尾的 与\意思相同I teach linux.not 4900000448.
2.4 坑4 grep -v与[^a-z]
[^a-z] 排除按字符 某个字符 某些字符
grep -v [a-z] 排除按行
[root@oldboyedu50-lnb /oldboy]# grep '[^a-z]' oldboy.txt[root@oldboyedu50-lnb /oldboy]# grep -v '[a-z]' oldboy.txt