通配符及正则表达式

2019-05-21  本文已影响0人  酷酷的伟

常用正则表达式特殊字符及含义

类别 区别 支持的命令
通配符 方便我们进行查找文件 Linux下面大部分命令支持
正则 方便我们进行过滤(在文件中找内容) Linux三剑客 开发语言Python Go PHP JAVA

基础正则表达式符号

字符 作用
^ 以……开头的行
$ 以……什么结尾
^$ 组合符号,表示空行
. 点号,表示匹配任意一个字符(不匹配空行)
\ 转义字符,给特殊符号脱掉马甲。
* 匹配前一个字符(连续出现)0次或1次以上
.* 组合符,匹配所有内容
^.* 组合符,匹配以任意多个字符开头得内容
.$* 组合符,匹配以任意多个字符结尾的内容
[abc] 匹配[]集合内任意一个字符a或b或c;[abc]也可以也可以写成[a-c]
[^abc] 匹配不包含后的任意字符a或b或c,这里的表示对[abc]取反

环境准备

[root@oldboy /oldboy]# cat >>oldboy.txt<<EOF
>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!
>EOF

^号的例子:

在这个文件中找出以ssh开头的行

[root@oldboy /oldboy]# grep '^I' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!

$号的例子

在文件中找出以m结尾的行

[root@oldboy /oldboy]# grep 'm $' oldboy.txt
my blog is http://oldboy.blog.51cto.com 
our size is http://blog.oldboyedu.com 

这里m后面是故意加了空格的,所以m后面需要加一个空格

^$的例子

在文件中找出空行

[root@oldboy /oldboy]# grep -n '^$' oldboy.txt
3:
8:

.(点)号的例子

在文件中筛选任意字符

[root@oldboy /oldboy]# grep -n '.' oldboy.txt
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com 
6:our size is http://blog.oldboyedu.com 
7:my qq is 49000448
9:not 4900000448.
10:my god ,i am not oldbey,but OLDBOY!

.(点)的执行过程

[root@oldboy /oldboy]# grep -o '.' oldboy.txt
I

a
m

o
l
d
b
o
y
……
省略若干

转义字符的例子

image

因为.在正则表达式里有特殊含义,所以需要用转义字符帮他脱掉马甲

转义字符系列

tr的应用
将文件里的回车换成空格

[root@oldboy /oldboy]# tr '[\n]' '[\t]' <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! 
echo的应用
在字符串里插入空格和回车

[root@oldboy /oldboy]# echo -e 'oldboy\n\toldboy2'
oldboy
    oldboy2

*号的应用

在文件中筛选出现0字符出现的多少次

image

简单理解他可以匹配出连续出现的字符。连续0次就是不显示,0次以上就会向上面的一样显示出来

.*的例子

image

通过这个命令我的原意是想找出每一行从开头的任意字符到第一个o。结果他直接帮我找到最后一个o.这里先不要纠结怎么找出来原意需要的东西。通过这个例子是想介绍一下正则表达式的贪婪性。意思是有多少匹配多少。

[]的例子

从文件中筛选出a到z和A到Z之间的字符。

image

[a-z]===[a-zA-Z]
[a-zA-Z0-9]===[a-Z0-9]==[0-Z]

课堂练习题
显示以m或n或o开头的并且以m或n点结尾的行

[root@oldboy /oldboy]# grep '^[mno].*[mn.]$' oldboy.txt
not 4900000448.

[^]的例子

筛选除了abc之外的字符

image

这里的反选与grep的自带参数-v的区别是。他自带的是以行为单位,而正则是以字节为单位。

扩展正则

符号 作用
+ 前一个字符连续出现1次或多次,一般与[]一起使用
() 被括起来的内容相当于一个正体,用来表示向后引用(反向引用)
{} b{m,n}前一个字符连续出现至少m次最多n次b{m}前一个字符连续出现m次b{m,}前一个字符连续最多出现n次
前一个字符出现0次或1次

+号的例子

筛选0出现的多少次

image

基础正则不支持扩展正则。需要加上grep -E 或者egrep
+与号的区别是,是至少0次,+是至少1次。

|的例子

筛选文件中的oldboy或者linux字符

image

()的例子

筛选出文件中的oldboy或者oldbey

image

{}的例子

image

练习

环境准备

[root@oldboy /oldboy]# cat sfzeng.txt
金 211324198705244720
万 500224197105168312
任 1231231231oldboy
任 3oldboy
任 lidao97303136098
任 alex2197303136098
任 350182197303oldgir
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X

筛选出环境里合格的身份证

image
上一篇下一篇

猜你喜欢

热点阅读