我以为在OSX或Linux上获得IP地址将很容易学习如何在grep中使用正则表达式,但是看起来我可能有语法错误或对所需内容的误解。
我知道这个正则表达式是正确的,尽管我知道它可能不是有效的IP地址,但目前我还没有考虑。
(\d{1,3}\.){3}\d{1,3}
Run Code Online (Sandbox Code Playgroud)
所以我不确定为什么这行不通。
ifconfig | grep -e "(\d{1,3}\.){3}\d{1,3}"
Run Code Online (Sandbox Code Playgroud)
两件事情:
首先,-e和之间存在区别-E:-e只是说“接下来的事情是一个表达式”,而-E说:“使用扩展的正则表达式”。根据您使用的grep的确切版本,您需要-E使一切正常工作。
第二,正如之前所指出的,-d并不是所有版本的grep都可以识别。我发现以下工作有效:由于ip地址是“常规”数字,因此我们不需要花更多的[0-9]钱就能找到它们:
ifconfig | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
Run Code Online (Sandbox Code Playgroud)
无需转义其他字符(在我的grep版本中-使用OSX 10.7.5)
顺便说一句,在测试正则表达式时,您可以考虑使用类似
echo "10.1.15.123" | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
Run Code Online (Sandbox Code Playgroud)
确认regex是否正常工作-不管的确切输出如何ifconfig。它将问题分为两个较小的问题,通常这是一个很好的策略。