jen*_*fer 36 grep regex ip-address
使用以下grep语法,我想匹配文件中的所有 IP 地址(来自ksh脚本)
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
Run Code Online (Sandbox Code Playgroud)
问题:它还匹配具有超过 4 个八位字节的单词 (IP):
1.1.1.1.1
Run Code Online (Sandbox Code Playgroud)
或者
192.1.1.1.160
Run Code Online (Sandbox Code Playgroud)
如何将有效IP 和仅具有 4 个八位字节的 IP 地址匹配?如果grep不起作用,我也可以使用 Perl——一种单行语法解决方案。
udo*_*udo 60
尝试这个:
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts
Run Code Online (Sandbox Code Playgroud)
匹配从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
Run Code Online (Sandbox Code Playgroud)
你只会得到 IP 地址
注意:
在solaris 上egrep可能会完成这项工作。
Joe*_*nte 11
这个怎么样:
perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"' /etc/hosts
Run Code Online (Sandbox Code Playgroud)
小智 5
这
-w / --word-regexp
Run Code Online (Sandbox Code Playgroud)
标志grep使其仅在单词边界上匹配,这意味着您的匹配必须由空格包围或在行的开头/结尾开始/结束!
小智 5
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;
Run Code Online (Sandbox Code Playgroud)
要仅查找与 4 个八位字节完全匹配的匹配项(不包括 1.1.1.1.1 之类的内容),请使用以下命令:
grep -P '(?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)'
Run Code Online (Sandbox Code Playgroud)
它永远不应该检测非 IP 地址。该表达式可能会更复杂以验证更多内容,但这应该适用于大多数情况。它不会匹配前面的 0,因为 010.1.12.1 不是写入 IP 地址的常用方法。
| 归档时间: |
|
| 查看次数: |
145817 次 |
| 最近记录: |