我正在学习正则表达式,作为练习,我尝试 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