通过grep和正则表达式匹配有效IP

时间:2014-07-20 07:43:44

标签: regex linux bash grep

请告知我的语法错误,以及为什么以下正则表达式不起作用

这个例子是在bash shell下测试的:

echo 12.212.12.198 | grep "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]| [1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
  • 没有任何输出

所有IP的相同,如192.9.200.12,172.18.12.34等......

1 个答案:

答案 0 :(得分:1)

您缺少-E(PATTERN是扩展正则表达式(ERE))
这是google上的一个好工作:

grep -E "^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"

这是([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])的四个部分,就像这样工作

[1-9]           # 1-9
[1-9][0-9]      # 10-99
1[0-9][0-9]     # 100-199
2[0-4][0-9]     # 200-249
25[0-5]         # 250-255

前导0无效,因此如果有前导0

,则无效