我认为在 OSX 或 Linux 上获取 IP 地址会很容易学习如何将正则表达式与 grep 一起使用,但看起来我要么有语法错误,要么误解了所需的内容。
我知道这个正则表达式是正确的,虽然我知道它可能不是一个有效的 IP 地址,但我现在没有考虑这一点。
(\d{1,3}\.){3}\d{1,3}
所以我不确定为什么这不起作用。
ifconfig | grep -e "(\d{1,3}\.){3}\d{1,3}"
两件事情:
-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.
\d
grep 不理解,您可以使用[0-9]
or [[:digit:]]
。不幸的是,正则表达式有很多方言。您还必须逃避{
,}
和。以下对我有用(
)
/sbin/ifconfig | grep -e "\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}"