我想删除所有格式为 10.20.30.* 且最后 3 位数字在 0 到 200 范围内的 IP 地址,并将所有剩余的 IP 移动到新文件中。
我已将要排除的IP列表放入文件whiteIP.txt中,其内容为:
^10.20.30.([0-1][0-9][0-9]|2[00])
我的原始文件的内容是:
10.20.30.150,20
10.20.30.134,20
10.20.30.201,20
10.20.30.5,20
10.20.30.250,20
10.20.30.42,20
222.233.201.5,20
10.233.201.5,20
111.233.201.5,20
我正在尝试命令:
grep -vE -f whitetest.txt testIP.txt
它给了我错误的结果。它应该给我以下结果:
10.20.30.201,20
10.20.30.250,20
222.233.201.5,20
10.233.201.5,20
111.233.201.5,20
任何建议都会有很大帮助。
答案1
几件事:
.
是一个特殊字符,因此必须对其进行转义:
^10\.20\.30\.([0-1][0-9][0-9]|2[00])
2[00]
匹配 20 个,而不是 200 个:
^10\.20\.30\.([0-1][0-9][0-9]|200)
您必须分别处理单位数和两位数:
^10\.20\.30\.([0-1][0-9][0-9]|200|[0-9][^0-9]|[0-9][0-9][^0-9])
这给出了正确的结果:
$ grep -vE -f whitetest.txt testIP.txt
10.20.30.201 20
10.20.30.250 20
222.233.201.5 20
10.233.201.5 20
111.233.201.5 20
答案2
我认为这应该得到你想要的:
grep -vE '10\.20\.30\.(1|..?,|200)
' <<\IN
10.20.30.150,20
10.20.30.134,20
10.20.30.201,20
10.20.30.5,20
10.20.30.250,20
10.20.30.42,20
222.233.201.5,20
10.233.201.5,20
111.233.201.5,20
IN
基本上,您只需排除 10.20.30 的任何匹配项,其中最后一个八位字节少于三个字符,以 1 开头,或者整个为 200。
以上打印:
10.20.30.201,20
10.20.30.250,20
222.233.201.5,20
10.233.201.5,20
111.233.201.5,20