这个正则表达式怎么能像#34; 0.0083"通过? grep -ioE'([0-9] {1,3}。){3} [0-9] {1,3}'

时间:2016-07-01 10:10:54

标签: regex

我正在尝试为主动扫描网络制作一个bash脚本。看来我对正则表达式并不感兴趣。代码如下所示:

#! /bin/bash                                                               
cd /home/pi/int_lib

for word in $(nmap -sn 192.168.1.0/24 | grep -ioE '([0-9]{1,3}.){3}[0-9]{1,3}' |
grep -v -)
do
    mac=$(arp $word | grep -ioE '([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}')
    echo $word: $mac
done

我只是想知道像" 0.0083"可以通过第一个正则表达式。 nmap给出了每个主机的响应时间,并且在一种情况下,所提到的行通过了过滤器。为什么呢?

1 个答案:

答案 0 :(得分:2)

正则表达式

([0-9]{1,3}.){3}[0-9]{1,3}

匹配1-3个数字,后跟任意字符,3次,后跟1-3个数字。总计至少7个字符/数字。用n作为数字进行说明,它看起来像这样

n.n.n.n

其中.是任何字符,最长形式

nnn.nnn.nnn.nnn

由于0.0083只有6个字符长,因此永远不会匹配该正则表达式。

...只需添加一个数字,例如0.00831使其匹配。

最后,我相信你所追求的是相同的,但.转义,因此只匹配点。

([0-9]{1,3}\.){3}[0-9]{1,3}