Grep:IP的正则表达式不匹配

时间:2017-03-14 13:07:54

标签: regex linux bash ip

我试图创建一个匹配ip地址的正则表达式,或者使用网络掩码的ip地址: 类似于8.8.8.8/24

if ! [[ $SOURCE =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] || [[ $SOURCE =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$ ]];then
                echo ERROR: Invalid Source
                exit 1
fi

第一部分匹配良好,第二部分与网络掩码最佳匹配.. 谁知道为什么?

1 个答案:

答案 0 :(得分:1)

在单独的变量中定义正则表达式并使用单个模式:

SOURCE="8.8.8.8"
RX="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]{1,2})?$"
if ! [[ $SOURCE =~ $RX ]];then
                echo ERROR: Invalid Source
                exit 1
fi

请参阅online demo here

模式说明

  • ^ - 字符串开头
  • [0-9]{1,3}\. - 1到3位数后跟一个文字点
  • [0-9]{1,3}\.[0-9]{1,3}\. - 与上述相同,2次
  • [0-9]{1,3} - 1到3位数(这与IP字符串匹配)
  • (/[0-9]{1,2})? - 可选的(1或0次出现)序列:
    • / - 一个斜杠(因为它不是一个特殊的字符,它不需要转义)
    • [0-9]{1,2} - 1到2位
  • $ - 字符串结束。