【发布时间】:2017-11-23 02:25:34
【问题描述】:
我正在尝试通过正则表达式匹配在 traceroute 的输出中找到的 IP 地址。我不想验证它们,因为假设traceroute 是有效的(即不输出类似999.999.999.999 的东西是足够安全的。我正在尝试以下正则表达式:
([0-9]{1,3}.?){4}
我正在regex101 中对其进行测试,它确实验证了 IP 地址。但是,当我尝试
echo '192.168.1.1 foobar' | grep '([0-9]{1,3}.?){4}'
我什么也得不到。我错过了什么?
【问题讨论】:
-
如果你使用
grep -E '([0-9]{1,3}\.?){4}'?您使用了 POSIX ERE 模式,但没有通过-E选项。因此,grep使用了 POSIX BRE。 -
@WiktorStribiżew 这行得通。愿意详细说明答案以便我接受吗?我也想看看如何使用 BRE 解决我的问题
-
我没有注意到评论,但实际上我正在处理此更新,以展示如何在此处使用 BRE 语法。
-
只是我的意见,但既然你知道你正在寻找一个 IP,那么简单的东西就像 \b\d{1,3}\.\d{1,3}\.\d{1, 3}\.\d{1,3}\b 可以解决问题。制作\.? optional 意味着 1234 将是一个有效的 IP 匹配。或者即使没有 \b 也可能没问题。
-
请注意,How do you extract IP addresses from files using a regex in a linux shell? 帖子没有有效的 POSIX BRE/ERE 解决方案用于 IP 地址作为使用
grep提取的全字。