• shell 匹配 ip地址


    shell中正则表达式基本元素有

    ^ 只匹配行首

    $ 只匹配行尾

    * 匹配0或多个

    []  匹配[]内字符,只要匹配其中一个

    转义特殊字符为普通字符,特殊字符有$ . ' " * [ ] ^ | ( ) + ?

    . 匹配任意单字

    pattern{n} 匹配n次出现的pattern

    pattern{n,}  匹配最少出现n次的pattern

    pattern{n,m} 匹配出现次数在n与m之间的pattern

     

    现在需要匹配型如xxx.xxx.xxx.xxx的ip地址,构造测试文件 ip.txt

    10.1.1.1
    192.168.0.1
    192.168.0.101
    255.255.255.255
    999.0.0.1
    1.0.0.500
    a.0.0.0
    0.b.0.0
    1.1.1
    2.2
    1
    0.0.0.0

     

    基本思路就是要每个点之间的元素为整数,最多为3位整数[0-9]{1,3},然后用 . 拼接起来,加上^和$更精确的限制匹配对象

    
    
    cat ip.txt |grep '^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$'

    结果为

    10.1.1.1
    192.168.0.1
    192.168.0.101
    255.255.255.255
    999.0.0.1
    1.0.0.500
    0.0.0.0

    这里精度不够,需要严格限制整数为1-255(第一个元素不能为0,后面的可以为0),即0-9 10-99 100-199 200-249 250-255

    ([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])    注意|和()转义,另外|分割的元素要用()括住,若带-E参数指定为扩展正则的形式则不需用转义

    然后后面3个元素只要稍改下范围到0-255,简单的拼接起来

    cat ip.txt |grep '^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$'

    结果如下

    10.1.1.1
    192.168.0.1
    192.168.0.101
    255.255.255.255

    当然更简洁的写法,记得.后面的元要()括起来

    cat ip.txt |grep '^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(.([0-9]|([1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$'

     

  • 相关阅读:
    P6007 [USACO20JAN]Springboards G
    CF1000F One Occurrence
    P6100 [USACO19FEB]Painting the Barn G
    P5838 [USACO19DEC]Milk Visits G
    P4085 [USACO17DEC]Haybale Feast
    P4267 [USACO18FEB]Taming the Herd
    P1712 [NOI2016]区间
    CF786B Legacy
    P5665 划分
    NOI2020网上同步赛 游记
  • 原文地址:https://www.cnblogs.com/opama/p/4314554.html
Copyright © 2020-2023  润新知