正则表达式使用awk查找有效的IP地址

时间:2019-12-13 07:03:15

标签: regex awk

我获得了连接到网络的所有IP地址以及网络的字符串和名称,但是我想使用 awk regex

仅提取IP。

我尝试过:

awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}'

但是它会打印IP地址以及一些数字和日期,例如

2019-12-13 12
192.168.1.1
123.168.1.12
0.00012

但是我只想要IP地址。

4 个答案:

答案 0 :(得分:3)

能否请您尝试以下。由于没有提供样品,所以没有对其进行测试。

awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){print substr($0,RSTART,RLENGTH)}' Input_file

为什么OP的代码无法正常工作: :由于OP在正则表达式中提到了.,它与任何字符都不是文字字符.匹配,因此OP获得的结果也不是IP。在上面的代码中,通过执行\.进行了转义,这将使awk知道要查找文字字符.而不是任何字符。

答案 1 :(得分:1)

就正则表达式而言,PCRE兼容表达式(?:[12]?\d{1,2}\.){3}[12]?\d{1,2}应该可以满足您的需求。它是更全面的IP正则表达式的简化版本,可以在this question,上找到答案,并可以使用此demo.

进行测试

不幸的是,awk的能力非常有限,并且与PCRE不兼容。我建议改用perl,但是如果您坚持使用awk,则以下命令应该可以工作:

awk 'match($0, /[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]/) {print substr($0, RSTART, RLENGTH)}'

这使用awk兼容的正则表达式来匹配IP,并且是上述正则表达式的扩展形式。它会匹配并仅打印找到的IP ,而忽略其余的行。


在编辑问题之前,原始正则表达式为0-9]+.[0-9]+.[0-9]+.[0-9]+-.允许它匹配任何字符,这意味着连字符,空格和数字都是有效的匹配项。通过指定\.,正则表达式将与句点字符完全匹配。

答案 2 :(得分:0)

像这样吗?

$ cat file
172.27.1.256 # invalid ip
2019-12-13 12
192.168.1.1
123.168.1.12
0.00012
299.288.299.333 # invalid ip

$ grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]))\s+?$' file
192.168.1.1
123.168.1.12

答案 3 :(得分:0)

说实话,我对awk命令一无所知,但是作为一个很好的regularexp编写者,要提取ip地址,您可以使用此优化的exp:

success: function (data) {
    if (data.status) {
         //redirect the page to url.
         window.location.href = data.url;
    } 
},

您可以在这里检查: IP address Regex test

相关问题