파일을 검색하여 다른 파일의 정보가 포함되어 있는지 확인

파일을 검색하여 다른 파일의 정보가 포함되어 있는지 확인

두 개의 파일이 있습니다. 첫 번째는 unip.txt이고 두 번째는 입니다 ipex.txt. 모든 파일에는 IP 주소가 포함되어 있습니다.

unip.txt:

49.235.113.205
50.115.166.136
51.15.70.104
51.15.87.74
51.15.134.103
146.148.13.9
148.70.23.131
148.72.212.161
148.216.29.46
149.56.141.193

ipex.txt:

51.15.134.103
148.70.23.131
151.141.0.0
97.89.32.238

기본적으로 파일을 검색하여 파일에 IP가 unip.txt포함되어 있는지 확인하는 방법을 알아내려고 합니다 . ipex.txt각 행을 검색하는 것이 루프가 될 것 같지만 어떻게 해야 할지 모르겠습니다.

답변1

이 기능은 에 내장되어 있습니다 grep. 이 -f옵션을 사용하십시오.

grep -Fx -f ipex.txt unip.txt

그러면 모든 일치 항목이 인쇄됩니다. 예/아니요 답변에만 관심이 있는 경우 옵션 -q("조용함")을 사용하십시오.

if grep -Fxq -x -f ipex.txt unip.txt; then
    echo unip.txt contains IP addresses from ipex.txt
else
    echo "unip.txt doesn't contain IP addresses from ipex.txt"
fi

-F? 기본적으로 grep은 행을 ipex.txt정규식으로 해석하며 이 행의 점은 "모든 문자"를 의미합니다. 이로 인해 잘못된 일치가 발생할 수 있습니다. -F정규 표현식이 아닌 상수 문자열과 일치하는지 확인하세요.

-x? 이는 IP 주소가 의 전체 행과 일치하는지 확인하여 주소 일치 unip.txt와 같은 부분 일치를 방지합니다 .49.235.113.2049.235.113.205

답변2

이와 같은 문제를 해결하는 또 다른 방법은 명령을 사용하는 것입니다 comm. 두 파일을 비교하고 (1) 발견된 행을 식별하는 데 유용합니다.오직파일1, (2)에서 행을 찾았습니다.오직file2와 (3)에 있는 줄둘 다문서. 유일한 단점은 두 입력 파일을 모두 정렬해야 하며 정확한 줄과 일치한다는 것입니다(즉, 줄 내의 하위 문자열을 찾지 않습니다).

unip.txt귀하의 예제를 sum 으로 저장 ipex.txt하고 를 사용하여 정렬 sort한 후 실행했습니다 comm unip.txt ipex.txt. 산출:

146.148.13.9
148.216.29.46
        148.70.23.131
148.72.212.161
149.56.141.193
    151.141.0.0
49.235.113.205
50.115.166.136
        51.15.134.103
51.15.70.104
51.15.87.74
    97.89.32.238

출력에는 위에서 했던 것처럼 지점 (1), (2) 및 (3)에 해당하는 세 개의 탭으로 구분된 열이 있습니다. 다음과 같이 열의 출력을 억제할 수 있습니다 comm -1 unip.txt ipex.txt. 이 명령은아니요첫 번째 열을 인쇄합니다.

따라서 요약하자면, 질문에 답하려면 입력 파일을 정렬한 다음 를 실행해야 합니다. comm -12 unip.txt ipex.txt그러면 출력의 처음 두 열이 표시되지 않고 두 파일에 있는 줄이 인쇄됩니다.

148.70.23.131
51.15.134.103

도움이 되었기를 바랍니다!

관련 정보