Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Grep:IP的正则表达式不匹配_Regex_Linux_Bash_Ip - Fatal编程技术网

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

Regex Grep:IP的正则表达式不匹配,regex,linux,bash,ip,Regex,Linux,Bash,Ip,我试图创建一个与ip地址匹配的正则表达式,或与netmask匹配的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 Sour

我试图创建一个与ip地址匹配的正则表达式,或与netmask匹配的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
第一部分匹配良好,第二部分与网络掩码不匹配。。
有人知道为什么吗?

在单独的变量中定义regexp并使用单个模式:

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

图案说明

  • ^
    -字符串的开头
  • [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位
  • $
    -字符串结束

    • RX1=“^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$”RX2=“^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,2}.”如果![[$SOURCE1=~$RX1]| |[[$SOURCE=~$RX2]];然后回显错误:无效的源退出1。您不需要为此检查使用2个正则表达式,请使用一个。已工作!非常感谢。请注意,将模式放入变量中是在
      [[…]]
      内部传递正则表达式的最安全方式,因为在RHS内部,可能会发生变量扩展。看见