0~200 범위의 마지막 3자리가 포함된 10.20.30.* 형식의 모든 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]
200이 아닌 20과 일치:
^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
기본적으로 마지막 옥텟이 3자 미만이거나 1로 시작하거나 전체적으로 200인 10.20.30의 일치 항목을 제외하면 됩니다.
위의 내용은 다음과 같습니다.
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