我认为在OSX或Linux上获取IP地址会很容易学会如何使用grep使用正则表达式,但看起来我要么出现语法错误,要么误解了所需内容。
我知道这个正则表达式是正确的,虽然我知道它可能不是一个有效的IP地址,我现在不考虑这个。
(\d{1,3}\.){3}\d{1,3}
所以我不确定为什么这不起作用。
ifconfig | grep -e "(\d{1,3}\.){3}\d{1,3}"
答案 0 :(得分:3)
两件事:
首先,-e
和-E
之间存在差异:-e
只是说“下一个是表达式”,而-E
说:“使用扩展常规表述”。根据您使用的grep的确切版本,您需要-E
才能使事情正常工作。
其次,如前所述,所有版本的grep都无法识别-d
。我发现以下情况有效:因为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}'
确认您的正则表达式是否正常工作 - 无论ifconfig
的确切输出如何。它将问题分解为两个较小的问题,这通常是一个很好的策略。
答案 1 :(得分:0)
\d
,而是可以使用[0-9]
或[[:digit:]]
。不幸的是,正则表达式有许多方言。您还必须逃离{
,}
,(
和)
。以下适用于我
/sbin/ifconfig | grep -e "\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}"