1つのコマンド出力で複数のgrepを変数に保存する

1つのコマンド出力で複数の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最後のフィールドが同じ行だけを見て、Up2番目のフィールド(IPアドレスなど)を印刷します。

関連情報