使用grep获取ip地址

使用grep获取ip地址

我正在学习正则表达式,作为练习,我尝试 grep'ing 一个 ip 地址,但没有得到任何结果。我在 VSCode 上尝试了一下,确实有效。任何人都可以启发我我哪里出错了?

echo 192.168.1.1 | grep -e '\d+\.\d+\.\d+\.\d+'

答案1

使用grep -P

-P, --perl-regexp         PATTERNS are Perl regular expressions

答案2

请注意,正则表达式并不是真正用于解析 IPv4 地址等内容。你可以尝试这样做,达到一定程度的准确性:

如果单独匹配一个数字,则您的表达式\d+\.\d+\.\d+\.\d+将匹配由点分隔的任意四组数字。\d

请记住正则表达式有很多口味结果可能会有所不同,具体取决于所使用的引擎。当您按照另一个答案中的建议使用时grep -P,您会更改解析引擎。

匹配 IPv4 地址 - O'Reilly 的正则表达式手册你有一些例子。

这(仅)检查 IP 地址,但不会299.299.111.1通过很多检查:

^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$

页面中的其他示例尝试缩小检测范围以获取有效的 IP 地址,看看他们提出的从较长文本中准确提取的建议,您就会知道为什么 IPv4 地址不是正则表达式的良好游乐场:

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}↵
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

相关内容