zoukankan      html  css  js  c++  java
  • L013-linux基础正则表达式手把手实战讲解小节

    L013-linux基础正则表达式手把手实战讲解小节

      这么一看又有10天没更新博客了,最近也一直在学就是时间比较闲散,再加上做上次老师留的十多道题,所以时间比较紧张,本来做完题准备直接先看L014讲解,然后再看正则表达式,但是发现L014老师讲解的过程中已经带正则了,无奈,跳跃性失败,重新开始,那么还是按L013的来把。

      本节内容不多,只有正则表达式而且仅仅是基础的linux下的正则表达式,基本上在三剑客(awk,sed,grep)上都适用。

    下面代码中的红色为我自己加上的,为了方便查看,如果想自己也加上颜色可以使用 alias grep=‘grep --color=auto’

    正则表达式:


    那么正则表达式的概念是什么呢?

    简单的说,正则表达式就是一套处理字符串的规则和方法,以行为单位对字符串进行处理,
    通过特殊的符号的辅助,我们可以快速的过滤,替换某些特定的字符串。

    运维工作中,会有大量访问日志,数据日志,大数据。如何快速的过滤我们需要的内容,就靠正则表达式

    awk,sed,grep(egrep)三剑客要想能工作的更高效,那一定离不开正则表达的配合。

    基础正则表达式:BRE
    正则表达式就是一些特殊字符,赋予了他特定的含义。
    1)^word 表示搜索以word开头的

    [root@moban ~]# grep "^word" lcr.log 
    wordfjsdfdfk

    2)word$ 表示搜索以word结尾的

    [root@moban ~]# grep "word$" lcr.log  
    asdlkwsnfkjsdflksdfsdkword

    3)^$ 表示空行

    [root@moban ~]# cat 2.txt 
    
    
    dadaadadasword
    [root@moban ~]# grep -v "^$" 2.txt 
    dadaadadasword

    4). 代表且只能代表任意一个字符

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep "n.t" lcr.log 
    my god , my name is not oldbey , but OLDBOY.
    not boog
    net
    nat 
    n6t
    n.t

    5) 转意符号,让着有着特殊身份意义的字符脱掉马甲,还原字面意义原型

    6)* 重复0个或多个前面的一个字符 例:o* 可以零个o可以多个o

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep "591*579" lcr.log 
    My qq is 59111579
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579

    7).* 匹配所有字符 例如:^.*以任意字符开头

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep "^.*od" lcr.log 
    my god , my name is not oldbey , but OLDBOY.


    8)[] 字符集合的重复特殊字符的符号

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep "b[lo]og" lcr.log 
    My blog is http://lcr.blog.51cto.com
    not boog

    9)[^] 匹配不包含 例:[^word]匹配不包含^后的任意字符的内容
    10) {n,m} 重复n到m次,前一个重复的字符 如果用egrep可以去掉斜线

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep "591{1,4}579" lcr.log 
    My qq is 59111579
    my qq 591111579
    591579

    {n,} 至少n次到无限 如果用egrep可以去掉斜线

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep "591{4,}579" lcr.log    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579

    {n} n次 如果用egrep可以去掉斜线

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep "591{7}579" lcr.log  
    my qq 591111111579

    扩展的正则表达式:ERE
    1)+ 重复一个或一个以上前面的字符

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# egrep "591+579" lcr.log  
    My qq is 59111579
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579

    2)? 重复0个或1个前面的字符

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# egrep "591?579" lcr.log  
    591579
    59579


    3)| 用或的方式查找多个符合的字符串

    [root@moban ~]# egrep "3306|1521" /etc/services 
    mysql           3306/tcp                        # MySQL
    mysql           3306/udp                        # MySQL
    ncube-lm        1521/tcp                # nCube License Manager
    ncube-lm        1521/udp                # nCube License Manager

    4)() 找出“用户组”字符串

    [root@moban ~]# cat lcr.log 
    I am oldboy linux student.
    My blog is http://lcr.blog.51cto.com
    
    
    My qq is 59111579
    my god , my name is not oldbey , but OLDBOY.
    not boog
    
    
    my qq 591111579
    my qq 591111111579
    my qq 59111111111579
    591579
    59579
    
    net
    nat 
    n23t
    n6t
    n.t
    wordfjsdfdfk
    asdlkwsnfkjsdflksdfsdkword
    [root@moban ~]# grep -E "b(lo|oo)g" oldboy.log 
    My blog is http://oldboy.blog.51cto.com
    not boog

    注意:用扩展的正则表达式用egrep 或者 grep -E

  • 相关阅读:
    cocos2dx
    读书日记-快速排序算法
    vs重装找不到 $(WindowsSdkDir) 配置问题
    IOS应用FFMPEG库
    OpenGL ES2.0贴图
    OpenGL ES2.0光照
    IOS系统配置FFMEPG
    GPUImage库的使用
    spring08事务
    java10---点餐系统
  • 原文地址:https://www.cnblogs.com/lcrbg/p/5465373.html
Copyright © 2011-2022 走看看