Regex Grep:IP的正则表达式不匹配
我试图创建一个与ip地址匹配的正则表达式,或与netmask匹配的ip地址: 大概是8.8.8.8/24Regex 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
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
看
图案说明:
-字符串的开头^
-1到3位数字后跟文字点[0-9]{1,3}\.
-同上,2次[0-9]{1,3}\.[0-9]{1,3}\.
-1到3位数字(这与IP字符串匹配)[0-9]{1,3}
-可选(1或0次出现)序列:(/[0-9]{1,2})
-斜杠(因为它不是特殊字符,所以不需要转义)/
-1到2位[0-9]{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内部,可能会发生变量扩展。看见