我正在尝试为主动扫描网络制作一个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给出了每个主机的响应时间,并且在一种情况下,所提到的行通过了过滤器。为什么呢?
答案 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}