정규식은 특정 범위 내의 데이터를 제외하는 데 사용됩니다.

정규식은 특정 범위 내의 데이터를 제외하는 데 사용됩니다.

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

관련 정보