2011-10-26 86 views

回答

0

您是否知道unix grep

您可以在其他文件中grep搜索存储在文件中的目标字符串列表。

fgrep -f reservedList.txt yourListOfIpsSavedToAfile 

将在yourList *中打印任何与reservedList中的任何字匹配的行。

如果你这样做是一个shell脚本里面,那么你可以让你的动作条件

if fgrep -f reservedList.txt yourList > /dev/null 2>&1 ; then 
    echo "found items in reserved List" 
else 
    echo "no items found in reserved List" 
fi 

您可能需要使用grep -F reservedList ....。使用上面的第一个例子来看看这个工作是否正常,如果不是请参阅man grep来查看在你的OS/grep版本中使用哪些确切的参数。

如果你确实需要在awk中这样做,你将基本上在awk中重新创建这个功能。

我希望这会有所帮助。

+0

此外,GlennJackman在http://stackoverflow.com/questions/7741700/evaluating-command-with-awk给你的答案有什么问题?你一直在问同样的问题。精氨酸!祝你好运。 – shellter

+0

如果我有所有保留地址的列表,您的解决方案可能会很好。但我不知道。保留的地址数量很多,其格式显示在我发布的维基百科页面上。还有一些人的CIDR前缀不是8的倍数,所以为它们创建一个正则表达式并不是那么容易的 – markusian

+1

删除了以前的评论,因为它是在很早的时候写的,因为我没有时间重新编写它,阅读wikip上的地址列表(我错了;-()。无论如何,邮件中的第一句话是'我有一个ip地址列表',直到现在的reg exprs都没有提及。你只会解决你的问题当你可以花时间写清楚你正在努力完成什么,你想要/需要做什么,以及为什么你认为你需要这样做(见下) – shellter

0

如果你给你的好旧的IPv4的地址列表,如线输入线到脚本

while IFS=. read A B C D 
do ADDR=`printf %03d.%03d.%03d.%03d $A $B $C $D` 
    [[ 000.255.255.255 < $ADDR && $ADDR < 010.000.000.000 ]] && continue 
    [[ 010.255.255.255 < $ADDR && $ADDR < 100.064.000.000 ]] && continue 
    [[ 100.127.255.255 < $ADDR && $ADDR < 127.000.000.000 ]] && continue 
    [[ 127.255.255.255 < $ADDR && $ADDR < 169.254.000.000 ]] && continue 
    [[ 169.254.255.255 < $ADDR && $ADDR < 172.016.000.000 ]] && continue 
    [[ 172.031.255.255 < $ADDR && $ADDR < 192.000.000.000 ]] && continue 
    [[ 192.000.000.007 < $ADDR && $ADDR < 192.000.002.000 ]] && continue 
    [[ 192.000.002.255 < $ADDR && $ADDR < 192.088.099.000 ]] && continue 
    [[ 192.088.099.255 < $ADDR && $ADDR < 192.168.000.000 ]] && continue 
    [[ 192.168.255.255 < $ADDR && $ADDR < 198.018.000.000 ]] && continue 
    [[ 198.019.255.255 < $ADDR && $ADDR < 198.051.100.000 ]] && continue 
    [[ 198.051.100.255 < $ADDR && $ADDR < 203.000.113.000 ]] && continue 
    [[ 203.000.113.255 < $ADDR && $ADDR < 224.000.000.000 ]] && continue 
    echo $A.$B.$C.$D is reserved 
done 

,它会输出任何保留的地址。