使用CIDR表示法和注释将ip与列表进行匹配

时间:2018-04-28 09:58:15

标签: bash ip

我试图将ip地址(即192.168.192.168)与列表进行匹配:

192.168.192.0/24 TESTCOMMENT ...

我知道ipset支持评论,所以我尝试了以下内容:

$ ipset create foo hash:net comment
$ ipset add foo 192.168.192.0/24 comment TESTCOMMENT
$ sudo ipset test foo 192.168.192.168
192.168.192.168 is in set foo.

如您所见,我的评论未显示。我的下一个尝试是使用grepcidr

$ cat foo.txt 
192.168.192.0/24 TESTCOMMENT
$ grepcidr -f foo.txt <(echo 192.168.192.168)
192.168.192.168
$ grepcidr -f foo.txt <(echo 192.168.0.168)
$

匹配但未显示评论。

有人知道尝试的替代方案吗?

1 个答案:

答案 0 :(得分:0)

在其他人的帮助下,我们已经解决了这个问题。我们使用rgxg将文件中的子网更改为正则表达式。

$awk -v ip=192.168.192.168 '{ "rgxg cidr " $1 | getline regex; if (ip ~ regex) print $2 }' foo.txt
TESTCOMMENT

我使用的解决方案是将正则表达式保存到文件中:

192.168.192。(25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] {2} | [1-9]?[0-9])TESTCOMMENT

并使用以下行测试IP地址:

$ ip=192.168.192.168; while read line; do [[ $ip =~ ${line%% *} ]] && echo ${line##* }; done < foo.txt
TESTCOMMENT