• grep与正则表达式的使用


    正则表达式以及grep的使用

    grep是一种文本过滤工具(模式:pattern)基本使用用法如下:

     grep  [option] PATTERN  FILE          
     grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
          --colour=auto:对匹配到的文本着色
          -i:ignorecase 忽略字符大小写
          -o:仅显示匹配到的字符串本身
          -v:反向显示
          -E:支持扩展的正则表达式
          -q:静默模式 不输出任何信息
          -A#:after 后#行
          -B#:before 前#行
          -C#:context 前后#行
    

    基本正则表达式的元字符:


              字符匹配:
                         . :任意单个字符
                        []:匹配指定范围内的任意单个字符
                        [^]:匹配指定范围外的任意单个字符
                匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数
                        *:匹配其前面的字符任意此;0,1,多次
                       .*:匹配任意长度的任意字符           
                       ?: 匹配前面的字符0次或1次,即其前面的字符可有可无
                       +: 匹配前面的字符1次或多次,即前面的字符至少出现1次
                      {m}:匹配前面的字符m次
                      {m,n}匹配前面的字符至少m次,最多n次
                            {0,n}:最多n次
                            {m,}:至少m次
                位置锚定
                        ^:行首锚定:用于模式的最左侧
                       $:行尾锚定;用于模式最右侧
                       ^PATTERN$:用于PATTERN来匹配整行
                       ^$:空白行
                       ^[[:space:]]*$:空白行货包含空白字符的行
                      单词:非特殊字符组成的连续字符串都称为单词
                       < 或:词首锚定 用于单词模式的左侧 
                       >或:词尾锚定,用于单词模式的右侧
                       <PATTERN>:匹配完整单词
                分组及引用
                       ():将一个或多个字符捆绑在一起,当作一个整体处理
                                 例如:(xy)*ab
              分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为
                   1:模式从左侧起,第一个左括号以及与之匹配的右括号之前的模式所匹配到的字符
                   2:模式从左侧起,第二个左括号以及与之匹配的右括号之前的模式所匹配到的字符
                   3:
           后项引用:应用前面的分组括号中的模式所匹配到的字符
    

    扩展正则表达式

            字符匹配
                  .:匹配任意单个字符
                  []:指定范围内的任意单个字符 
               [^]:匹配指定范围外的任意单个字符
            次数匹配
                    *:任意次,0,1或多次
                   ?:0次或1次,其前字符可有可无
                    +:其前字符至少1次
                  {m}:其前字符至少m次
                  {m,n}:其前的字符m次
            位置锚定
                   ^:行首锚定
                   $:词尾锚定
                   < 或:词首锚定 用于单词模式的左侧 
                   >或:词尾锚定,用于单词模式的右侧
                   <PATTERN>:匹配完整单词  
            分组及引用:
                 ():分组,括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中
                  后向引用:1, 2
            或: a|b: a或者b
    

    练习:

    1 取出ifconfig命令中的ip地址
    [root@Linuxprobe ~]# ifconfig | egrep  -o "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-4]|25[0-5]).(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5]).){2}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5])"
    10.127.69.19
    255.255.255.0
    10.127.69.255
    127.0.0.1
    255.0.0.0
    192.168.122.1
    255.255.255.0
    192.168.122.255
    [root@Linuxprobe ~]# ifconfig | egrep -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" 稍微简洁写的写法
    10.127.69.19
    255.255.255.0
    10.127.69.255
    127.0.0.1
    255.0.0.0
    192.168.122.1
    255.255.255.0
    192.168.122.255
    [root@Linuxprobe ~]# ifconfig | egrep -o "(([0-9]{1,3}).){3}[0-9]{1,3}"再次进行精简
    10.127.69.19
    255.255.255.0
    10.127.69.255
    127.0.0.1
    255.0.0.0
    192.168.122.1
    255.255.255.0
    192.168.122.255
    
    2 找出/etc/passwd中用户名与默认shell同名的的行  
     [root@Linuxprobe ~]# cat /etc/passwd | grep -E "^([[:alnum:]]+>).*1$"
     sync:x:5:0:sync:/sbin:/bin/sync
     shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     halt:x:7:0:halt:/sbin:/sbin/halt
     bash:x:1002:1002::/home/bash:/bin/bash
     nologin:x:1003:1003::/home/nologin:/bin/nologin
    
    3 取出一个文件的基名和路径名
    [root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$" 取一个文件的基本
    ifcfg-ens33
    [root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep  "^/.*/" -o 取出路径名
    /etc/sysconfig/network-scripts/
    
    4 取出/etc/rc.d/functions文件某个单词后面跟一个小括号的行
     [root@Linuxprobe ~]# egrep "[[:alnum:]]+>()+" /etc/rc.d/init.d/functions -o
    checkpid()
    checkpids()
    kill()
    .....
    
    5 用两种方法显示/proc/meminfoz中大写或小写S开头的行
    [root@Linuxprobe backups]# grep "^[sS].*" /proc/meminfo 
    SwapCached:87404 kB
    SwapTotal:   2097148 kB
    SwapFree:1929492 kB
    Shmem:  8332 kB
    Slab: 189808 kB
    SReclaimable: 118840 kB
    SUnreclaim:70968 kB
    [root@Linuxprobe backups]# grep -E "^(s|S).*" /proc/meminfo 
    SwapCached:87400 kB
    SwapTotal:   2097148 kB
    SwapFree:1929496 kB
    Shmem:  8336 kB
    Slab: 189808 kB
    SReclaimable: 118840 kB
    SUnreclaim:70968 kB
    6 取出/etc/paswwd文件中默认shell为非/sbin/nogloin
    [root@Linuxprobe backups]# grep -v "nologin>$" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
    .............................................
    7 取出/etc/paswwd文件中默认shell为/bin/bash的用户
    [root@Linuxprobe backups]# grep  "bash>$" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
    student:x:1001:1001::/home/student:/bin/bash
    bash:x:1002:1002::/home/bash:/bin/bash
    user1:x:1004:1004::/home/user1:/bin/bash
    .............................................
    
    8 找出/etc/passwd 文件中的一位数或两位数
    [root@Linuxprobe backups]# grep -E  "<[0-9]{1,2}>" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    .............................................
    
    9 显示/boot/grub/grub.conf中至少一个空白字符开头的行
    [root@Linuxprobe backups]# grep -E "^[[:space:]]+" /boot/grub2/grub.cfg 
    10 显示/etc/rc.d/network文件中以#开头局,后面至少一个空白字符,而后又至少一个非空白字符行
    [root@Linuxprobe backups]# grep -E "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/init.d/network 
    # network   Bring up/down networking
    # chkconfig: 2345 10 90
    # description: Activates/Deactivates all network interfaces configured to 
    .......................
    
    11 打出netstat -tan命令执行结果以“LISTEN”,后面跟空白字符的行
    [root@Linuxprobe backups]# netstat -tan | grep -E "LISTEN>[[:space:]]+"
    tcp0  0 0.0.0.0:111 0.0.0.0:*   LISTEN 
    tcp0  0 192.168.122.1:530.0.0.0:*   LISTEN   
    ............................................
    
    12 匹配出所有的邮件地址
    [root@Linuxprobe ~]# cat mailtest | grep -E "<[[:alnum:]]*@[[:alnum:]]*[[:punct:]]*[[:alnum:]]*.[a-z]+>" 
    noc@google.com
    noc@telstra-pbs.cn
    noc@pacnet.com.cn
    414804000@qq.com
    jzssysjzzyxgs@3158.com 
    sales@wiremesh-machine.cn 
    1305480186@qq.com 
    .............
  • 相关阅读:
    将纸质照片转成数字报名照
    华为手机如何下载google play商店中的apk
    大疆Mavic 2发布
    [转] Spring使用Cache、整合Ehcache
    [转] spring-boot集成swagger2
    [转] Intellij IDEA快捷键与使用小技巧
    [转] 这个常识很重要,教你如何区分JEDEC 1600内存与XMP 1600内存
    [转] 下载文件旁边附的MD5/SHA256等有什么用途?
    Openresty 健康检查
    Vuforia图像追踪,动态创建的对象隐藏显示的坑
  • 原文地址:https://www.cnblogs.com/harryblog/p/8087783.html
Copyright © 2020-2023  润新知