2014-01-17 4 views
0

IP 주소 목록 (3000)을 광고하고 있는지 확인하는 작업이 주어졌습니다. 수동으로하는 것은 좋지 않기 때문에 광고중인 모든 IP 주소를 파일에 복사했습니다. 이제 bash 스크립트를 작성하고 ip 주소 목록을 스크립트에 제공하여 광고중인 IP 주소 목록이있는 파일에서 IP 주소를 찾을 수 있습니다. 발견되면 다른 파일에없는 경우 한 파일에 저장하십시오. 이것은 내가 지금까지 가지고있는 것이다. 이 스크립트의 문제점은 모든 IP 주소를 수동으로 입력해야한다는 것입니다. 우리가 광고하는 IP 주소 목록과 함께 파일에서 검색 할 IP 주소 목록이있는 파일을 어떻게 가져올 수 있습니까? 매우 진보 된 주셔서 감사합니다. 당신이 필요로하는 모든입니다다른 파일에서 IP 주소 목록을 찾는 방법

#!/bin/bash 

while true; do 
    echo -e "IP address: \c" 
    read ip 

    if grep --color "$ip" "ips"; then 
    echo $ip "was found" 
    echo $ip >> found 
    else 
    echo $ip "was NOT found" 
    echo $ip >> notFound 

    fi 

done 

답변

2

더 나은 스크립트를

while read ip 
do 
    grep "$ip" "$ips" > /dev/null 2>&1 && echo "$ip" >> ip.found || echo "$ip" >> ip.notfound 
done  

이름 스크립트 "searchip.sh"
이 입력 파일을 가정 "iplist"이면 변수를 설정하고 다음과 같이 호출하십시오.

ips=ips 
cat iplist | sh searchip.sh 

또는

sh searchip.sh < iplist 

는 그런 다음 두 개의 파일을 얻을, 하나가 발견 IP이고, 다른 하나는 IP를 찾을 수 없습니다.
쉘 I/O 리디렉션이 필요합니다.

+0

이것은 목록에있는 IP 중 하나의 부분 문자열 일 경우 IP가 발견된다고 말합니다. 또한'.'는'grep'에 특별한 의미가 있습니다. 이것은 와일드 카드 문자이고 이것은 거짓 일치를 일으킬 수 있습니다. 'grep -F -x'를 사용하면 일반 표현식 문자를 특별히 처리하지 않고 전체 행을 일치시킬 수 있습니다. – Barmar

2
$ script < list_of_ip_addresses 

. 광고 된 IP 주소를 표시합니다

comm -12 all_ip_addresses_sorted advertised_ip_addresses_sorted 

:

sort all_ip_addresses > all_ip_addresses_sorted 
sort adverted_ip_address > advertised_ip_address_unsorted 

comm -23 all_ip_addresses_sorted advertised_ip_addresses_sorted 

이 광고를하지 않는 IP 주소를 보여 것이다 : 당신이 두 개의 파일을 정렬 할 경우

3

, 당신은 comm 명령을 사용할 수 있습니다 .

또한 공정 대체를 사용하여 별도의 정렬 된 파일을 작성 피할 수

:

comm -23 <(sort all_ip_addresses) <(sort advertised_ip_addresses) 
+0

+1 : 우아! @Barmar : 공정 대체를위한 좋은 장소? 'comm -12 <(sort all_ip_addresses) <(advertised_ip_addresses 정렬)' – grebneke

+0

예, 저는 그 관용구를 여러 번 사용했습니다. 그러나 나는 그것이 대답에 필요하다고 생각하지 않는다. – Barmar