通配符与正则表达式区别?
*.txt *.log
touch {01…10}
作用 支持的命令
通配符 方便我们进行查找文件 Linux下面大部分命令支持
正则表达式 方便我们进行过滤(在文件中查找内容) Linux三剑客 开发语言 Python Go PHP Java
在此之前先创建一个环境
cat oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu59 /oldboy]# grep ’ ’ oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu59 /oldboy]#
[root@oldboyedu59 /oldboy]# grep 'm KaTeX parse error: Expected 'EOF', got '#' at position 120: …yedu59 /oldboy]#̲ cat -A oldboy.…
I teach linux.$
$
I like badminton ball ,billiard ball and chinese chess!$
my blog is http://oldboy.blog.51cto.com $
our size is http://blog.oldboyedu.com $
my qq is 49000448$
$
not 4900000448.$
my god ,i am not oldbey,but OLDBOY! $
正则表达式
什么是正则表达式
在/etc/service文件中过滤出包含3306的行
在这个文件中找出以ssh开头的行
含义
发明一套符号
不同符号有不同含义
方便我们在文件中查找/过滤内容
正则表达式 Regular Expression RE
正则表达式的分类
基础正则
Basic RE BRE
^ $ ^$ * .* [] [^]
扩展正则
Extended RE ERE
+ | () {} ?
使用正则注意事项
注意中文符号
‘’ “” . ^ $ () {} []
‘’“”. ¥ () {} 【】
给grep egrep加上颜色
CentOs7系统完成
CentOs6自己添加别名
基础正则
^
以...开头的行
^m
^oldboy
$
以…结尾的行
这里m的后面有一个空格(坑)
h$
cat -A 显示出文件中所有隐藏符号 每一行结尾==加上$
^$
空行 这一行什么都没有
排除空行
点
任意一个字符(单个)
不会匹配出空行
grep -o
显示grep每次过滤出什么内容(匹配什么内容)
显示grep执行过程
找出文中以.(小数点)结尾的行
grep '\.$' .oldboy.txt
\
转义字符
脱掉马甲 打回原形
去掉符号原有特殊含义
转义字符系列
撬棍系列:
\n
回车
\t
按tab 按一次tab 8个空格长度区域
把oldboy.txt回车替换为\t
tr '\n' '\t' < oldboy.txt
echo
-e
让echo支持转义字符\n \t
-n
不输出每行结尾的回车
*
前1个字符连续出现0次或0次以上
连续出现====重复(repetition)
000*
0000000000000* 连续出现的0
oldboy* 连续出现的字母
.*
所有 任意字符
可以间接的表现出并且
特点:贪婪性
.*o
匹配能匹配多少就匹配多少 来者不拒
正则表达式表示所有(.*)或者连续出现的时候 会产生贪婪
[]
[0-9]
[a-Z]====[a-zA-Z]
[abc]
相当于1个字符,匹配到a或者b或者c
grep ‘[a-z]’ oldboy.txt
grep ‘[A-Z]’ oldboy.txt
grep ‘[a-zA-Z]’ oldboy.txt
grep ‘[a-z,A-Z]’ oldboy.txt 会显示标点(坑)
大小写字母+数字
[[a-zA-Z]0-9]
[a-Z0-9]
[0-Z]
中括号里面写什么就找什么
[^]
[^abc]
不要a不要b不要c
尖号只有在中括号第一个位置才表示排除或取反
grep -v 与 [^abc] 区别?
grep -v 字符 不要a不要b不要c
[^abc] 行 排除某一行
grep ‘1’ oldboy.txt
grep ‘[mn.]$’ oldboy.txt
grep ‘2.*[mn.]’ oldboy.txt
扩展正则表达式
+
前1次连续出现1次或多次
一般就是[]一起使用
例如 egrep -o [a-zA-Z]+ oldboy.txt
|
或者 ![在这里插入图片描述](https://img-blog.csdnimg.cn/201904172127132.png)
?
前一个字符出现0次或1次
{}
连续出现
*
>=0
+
>=1
b{m,n}前1个字符连续出现至少m次最多出n次
>=m <=n
b{m,} 前1个字符连续出现至少m次
>=m
b{m} 前一个字符连续出现m次
==m
b{,n} 前1个字符连续出现最多n次
<=n
连续出现
*
>=0
+
>=1
()
用来表示后反引用(反向引用)
被括起来的内容相当于一个整体
括号表达式
[[:alnum:]]
大小写字母和数字
查找帮助
man grep
info grep
正则总结
BRE ERE区别
符号不同
支持的命令不同
grep
注意坑
中英文符号
[]
分类
连续出现
*
+
{}
?
其他
^
$
^$
.
*
.*
[]
[^]
显示以m或n或o开头的行
以m或n或点结尾的行
显示以m或n或o开头的并且以m或n或点结尾的行
#显示以m或n或o开头的行
[root@oldboyedu59 /oldboy]#
[root@oldboyedu59 /oldboy]# grep ‘3’ oldboy.txt
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
#以m或n或点结尾的行
[root@oldboyedu59 /oldboy]#
[root@oldboyedu59 /oldboy]# grep ‘[mn.]$’ oldboy.txt
I teach linux.
not 4900000448.
#显示以m或n或o开头的 并且 以m或n或点结尾的行
[root@oldboyedu59 /oldboy]# grep ‘4.*[mn.]$’ oldboy.txt
not 4900000448.
#找出oldboy.txt 中连续出现的字母(大写或小写)
[root@oldboyedu-59 ~]# egrep -o [a-zA-Z]+ oldboy.txt
[root@oldboyedu59 /oldboy]# egrep ‘0{1,3}’
[root@oldboyedu59 /oldboy]# egrep ‘0{1,3}’ oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu59 /oldboy]# egrep -o ‘0{1,3}’ oldboy.txt
000
000
00
[root@oldboyedu59 /oldboy]# egrep ‘0{2,4}’ oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu59 /oldboy]# egrep ‘0{3}’ oldboy.txt
my qq is 49000448
not 4900000448.
id.txt
金 211324198705244720
万 500224197105168312
任 1231231231oldboy
任 3oldboy
任 lidao97303136098
任 alex2197303136098
任 350182197303oldgir
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X
取出文件中正确的身份证号码的行
egrep ‘[0-9]{17}[0-9X]’ 213.txt
[^$] 排除符号
[root@oldboyedu59 /oldboy]# egrep ‘oldboy|oldbey’ oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu59 /oldboy]# egrep ‘oldb[oe]y’ oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu59 /oldboy]# egrep ‘oldbo|ey’ oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu59 /oldboy]# egrep ‘oldb(o|e)y’ oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!