使用以下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
我如何匹配有效的grep
IP 和只有 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;