我可以使用什么正则表达式来匹配 IP 地址?

我可以使用什么正则表达式来匹配 IP 地址?

使用以下grep语法我想要匹配文件中的所有 IP 地址(来自ksh脚本)

  grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file

问题:它还匹配具有超过 4 个八位字节的单词(IP):

1.1.1.1.1 

或者

192.1.1.1.160

我如何匹配有效的grepIP 和只有 4 个八位字节的 IP 地址?如果不起作用,我也可以使用 Perl – 一行语法解决方案。

答案1

尝试这个:

grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

匹配从0.0.0.0到 的所有表达式999.999.999.999

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

您将仅获得 IP 地址

笔记:
在 solaris 上可能egrep将会完成这项工作。

答案2

这个怎么样:

perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"' /etc/hosts

答案3

-w / --word-regexp 

标志grep使其仅在单词边界上匹配,这意味着您的匹配必须被空格包围或者在行的开头/结尾处开始/结束!

答案4

if [ ` echo $ip | '^((25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)$'  | grep -o "\." | wc -l` -eq 1 ];
then ipv4=true;
else 
ipv4=false;

相关内容