5

我认为在 OSX 或 Linux 上获取 IP 地址会很容易学习如何将正则表达式与 grep 一起使用,但看起来我要么有语法错误,要么误解了所需的内容。

我知道这个正则表达式是正确的,虽然我知道它可能不是一个有效的 IP 地址,但我现在没有考虑这一点。

(\d{1,3}\.){3}\d{1,3}

所以我不确定为什么这不起作用。

ifconfig | grep -e "(\d{1,3}\.){3}\d{1,3}"
4

2 回答 2

5

两件事情:

-e首先,和之间有区别-E-e只是说“接下来是一个表达式”,而-E说:“使用扩展的正则表达式”。根据您使用的 grep 的确切版本,您需要-E让事情正常工作。

其次,如前所述,-d并非所有版本的 grep 都可以识别。我发现以下方法有效:由于 ip 地址是“常规”数字,我们不需要比[0-9]找到它们更花哨的东西:

ifconfig | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'

无需转义其他字符(在我的 grep 版本中 - 使用 OSX 10.7.5)

顺便说一句,在测试您的正则表达式时,您可以考虑使用类似

echo "10.1.15.123" | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'

to confirm that your regex is working - regardless of the exact output of ifconfig. It breaks the problem into two smaller problems, which is usually a good strategy.

于 2013-03-30T03:10:54.367 回答
0

\dgrep 不理解,您可以使用[0-9]or [[:digit:]]。不幸的是,正则表达式有很多方言。您还必须逃避{,}和。以下对我有用()

/sbin/ifconfig | grep -e "\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}"
于 2013-03-29T23:42:16.843 回答