Unix grep中的正则表达式

Unix grep中的正则表达式,unix,Unix,我正在尝试使用正则表达式匹配有效的Ip地址。我有一个表达,但问题是我不能理解grep的行为 要匹配0-255范围内的数字,我执行了以下操作: echo 15 | grep-E“[01]?[0-9][0-9]?| 25[0-5]| 2[0-4][0-9]” 但是它匹配所有的数字 例如,3000也是匹配的-我认为这是因为它匹配“30”,这是整个字符串3000的一部分。。。然后我试着 grep-E“([01]?[0-9][0-9]?| 25[0-5]| 2[0-4][0-9])$” (正在尝试匹配0-

我正在尝试使用正则表达式匹配有效的Ip地址。我有一个表达,但问题是我不能理解grep的行为

要匹配0-255范围内的数字,我执行了以下操作: echo 15 | grep-E“[01]?[0-9][0-9]?| 25[0-5]| 2[0-4][0-9]”

但是它匹配所有的数字

例如,3000也是匹配的-我认为这是因为它匹配“30”,这是整个字符串3000的一部分。。。然后我试着 grep-E“([01]?[0-9][0-9]?| 25[0-5]| 2[0-4][0-9])$”

(正在尝试匹配0-255,后跟行尾)。。 但这似乎不起作用。有什么建议吗

用括号分隔正则表达式的各个部分是否有效?像这样的东西->((a | b)c)(l | m)

 echo 15 | grep -E "^([01]?[0-9][0-9]?|25[0-5]|2[0-4][0-9])$"