掌握CIDR范围
我不时地要在我的Apache日志文件之外grep CIDR范围。对于落在自然边界(/ 8,/ 16和/ 24)上的范围,这很容易,但是对于其他范围(例如,/ 17和/ 25)则不那么容易。 例子: # 192.168.0.0/16: (easy) grep " 192\.168\." access_log # 192.168.128.0/17: (more thought required) grep -E " 192\.168\.(12[89]|1[3-9][0-9]|2[0-5][0-9])\." access_log # 192.168.0.0/17: (more thought required) grep -E " 192\.168\.([0-9]|[0-9][0-9]|1[01][0-9]|12[0-7])\." access_log # 192.168.128.0/18: (straining my brain) grep -E " 192\.168\.(1[2-8][0-9]|19[01])\." access_log 这些正则表达式会忽略包含前导零的IP地址,例如192.168.001.001,这在Apache日志文件中不是问题,但可能在其他日志文件中。打印机似乎特别喜欢前导零。将可选的零添加到正则表达式很容易,但这只会使整个过程变得更加困难。必须有一种更简单的方法。 有没有一种简单的方法可以从文件中选择匹配任何CIDR范围的行? 花哨的正则表达式扩展将被认为是不同的工具(例如,awk或perl如果需要,但我希望它是一种工具),只要它们使工作变得容易。理想情况下,我想要的是 grep "[:CIDR …