2017-01-18 5 views
0

でのコマンドの出力からすべての行(「ホストがアップしている」additionalyさらに使用するために-string):プロセス私は、変数内のホストとそのIPアドレスを格納したいnmapのネットワークスキャン出力のすべての行からのbash

Nmap scan report for samplehostname.mynetwork (192.168.1.45) 
Host is up (0.00047s latency). 

は、これまでの私のスクリプトのthats::

#!/bin/bash 

while IFS='' read -r line 
do 
    host=$(grep report|cut -f5 -d' ') 
    ip=$(grep report|sed 's/^.*(//;s/)$//') 
    printf "Host:$host - IP:$ip" 
done < <(nmap -sP 192.168.1.1/24) 

出力は、私は理解していない何かを作るnmapの出力を処理することのように見えます。それは "Host:"を最初に置き、最後に "IP:"を置きますが、$ ipの出力は完全に省略されています。

私のスクリプトの生成出力は次のとおりです。別々に

Host:samplehostname1.mynetwork 
samplehostname2.mynetwork 
samplehostname3.mynetwork 
samplehostname4.mynetwork 
samplehostname5.mynetwork - IP: 

(確認のためのよりよい解決策があるかもしれませんが)、$ホストと$ IPの抽出は、基本的に動作します。私はprintf $ hostか$ ipのどちらかを単独で使うことができます。

スクリプトに何が問題なのですか?ありがとう!

答えて

3

2つのgrepコマンドは標準入力から読み込み、ループから継承しているため、nmapからも読み込みます。 readは1行、最初はgrepが残りを消費し、2番目のgrepはすぐに終了します。しかし、これは非効率的で不必要である

while IFS='' read -r line 
do 
    host=$(grep report <<< "$line" |cut -f5 -d' ') 
    ip=$(grep report <<< "$line" |sed 's/^.*(//;s/)$//') 
    printf "Host:$host - IP:$ip" 
done < <(nmap -sP 192.168.1.1/24) 

:私はあなたが$linegrep内容に意味を疑います。 bashの組み込み正規表現サポートを使用して、必要なフィールドを抽出することができます。

regex='Nmap scan report for (.*) \((.*)\)' 
while IFS='' read -r line 
do 
    [[ $line =~ $regex ]] || continue 
    host=${BASH_REMATCH[1]} 
    ip=${BASH_REMATCH[2]} 
    printf "Host:%s - IP:%s\n" "$host" "$ip" 
done < <(nmap -sP 192.168.1.1/24) 
+0

それは素晴らしいです!しかし、今、私は "Host is up"正規表現を実装することにこだわりました。 – roothahn

+1

'up_regex = 'ホストはup \((*)s latency \)' 'のようなものを使いたいと思っていますか? – chepner

+0

私はup_regex = 'Host is(。*)'と考えましたが、既存のものへのチェックをどのように実装するのか分かりませんifステートメント – roothahn

1

これを試してみてください:

#!/bin/bash 
while IFS='' read -r line 
do 
    if [[ $(echo $line | grep report) ]];then 
    host=$(echo $line | cut -f5 -d' ') 
    ip=$(echo $line | sed 's/^.*(//;s/)$//') 
    echo "Host:$host - IP:$ip" 
    fi 
done < <(nmap -sP it-50) 

出力:

Host:it-50 - IP:10.0.0.10 

を私は、不要な行をスキップするかの句を追加しました。

関連する問題