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

通配符及正则表达式

作者: 酷酷的伟 | 来源:发表于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

    相关文章

      网友评论

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

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