하나의 명령 출력에서 ​​여러 grep을 변수에 저장

하나의 명령 출력에서 ​​여러 grep을 변수에 저장

시작된 IP 목록을 얻으려고 하므로 nmap먼저 모든 IP를 텍스트 파일에 저장하십시오.

nmap -v -sn 10.10.10.1-254 -oG hosts.txt 

nmap이제 이 IP에 대해 다른 명령을 실행하여 텍스트 파일에서 IP를 구문 분석하고 가져오고 싶습니다 . 다음을 시도하고 있지만 작동하지 않습니다. 변수 v가 IP 값을 보유하지 않습니다.

#!/bin/bash
while read line; do    
    v=$line|grep 'Up' -B1|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

    echo $v
done < hosts.txt

답변1

스크립트가 올바르게 작성되지 않은 것 같습니다.

v=$line | grep [...]

변수를 할당하면 출력이 없으므로 grep.

awk파일을 가리키는 것이 더 간단할 수 있습니다 hosts.txt.

$ nmap -v -sn 10.10.10.1/24 -oG hosts.txt > /dev/null 2>&1
$ awk '$NF=="Up" { print $2 }' hosts.txt    

생성된 파일의 형식을 고려하면 nmap(다른 IP 범위를 양해해 주시기 바랍니다. 분명히 다른 네트워크에 있지만 예제는 여전히 작동합니다):

$ head hosts.txt
# Nmap 7.60 scan initiated Fri May 11 10:14:28 2018 as: nmap -v -sn -oG hosts.txt 172.28.9.67/24
# Ports scanned: TCP(0;) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 172.28.9.0 (hostname1.internal)   Status: Up
Host: 172.28.9.1 (hostname2.internal)   Status: Up

표시된 호스트에만 관심이 있다면 Status: Up마법의 단어가 줄의 마지막 단어입니다. 따라서 우리는 일반적으로 awk마지막 필드가 동일한 줄만 보고 Up두 번째 필드(예: IP 주소)를 인쇄합니다.

관련 정보