美文网首页
通配符及正则表达式

通配符及正则表达式

作者: 酷酷的伟 | 来源:发表于2019-05-21 10:57 被阅读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

相关文章

  • 通配符与正则表达式

    通配符与正则表达式 通配符 通配符是用来匹配文件名的(最起码linux系统中是这样的)。 正则表达式与通配符的区别...

  • 通配符和正则表达式的区别

    通配符和正则表达式比较 (1)通配符和正则表达式看起来有点像,不能混淆。可以简单的理解为通配符只有*,?,[],{...

  • 如何理解正则表达式和通配符

    通配符 正则表达式 结论

  • bash编程-正则表达式

    正则表达式与通配符有部分相似之处,但正则表达式更复杂也更强大。 通配符用于(完全)匹配文件名,支持通配符的命令有:...

  • 【现学现忘&Shell编程】— 25.基础正则表达式

    1、正则表达式说明 正则表达式和通配符的区别 正则表达式用来在文件中匹配符合条件的字符串。 通配符用来匹配符合条件...

  • linux || 通配符&元字符& 转义符

    1 通配符(wildcard) 注意:需要说明的是,通配符与正则表达式语句有些相似,但它与正则表达式不同,只能将其...

  • Shell中的匹配

    shell支持的通配符shell支持一组通配符用于处理数据,但是要和正则表达式区别开来。shell的通配符实现的功...

  • 通配符及正则表达式

    常用正则表达式特殊字符及含义 类别区别支持的命令通配符方便我们进行查找文件Linux下面大部分命令支持正则方便我们...

  • 【MySQL必知必会】第18章:全文本搜索

    关联章节: 第8章LIKE关键字以及通配符 第9章正则表达式 通配符与正则表达式搜索都存在着一些性能上的限制,但是...

  • day17-正则表达式

    正则表达式符号含义 通配符与正则区别? 正则表达式中注意事项 正则表达式分类: 基本正则(BRE) ※ 扩展正则表...

网友评论

      本文标题:通配符及正则表达式

      本文链接:https://www.haomeiwen.com/subject/hrydzqtx.html