端末のコマンドから結果を抽出する
次のコマンドを使用してnmap
スキャンを実行しました。local network
nmap -sP 192.168.1.*
コマンドを実行すると、次のような結果が表示されます。
Nmap scan report for macbook.att.net (192.168.1.21)
Host is up (0.019s latency).
MAC Address: 71:DF:4B:44:80:F1 (Apple)
Nmap scan report for lenovo.att.net (192.168.1.15)
Host is up (0.045s latency).
MAC Address: 21:EA:7D:84:08:A1 (Liteon Technology)
コマンドを実行して次の内容だけを出力するにはどうすればよいですか?
1. Apple (192.168.1.21)
2. Liteon Technology (192.168.1.15)
今まで試したこと
これまで試してみた結果、期待grep
どおりにうまくいきません。 nmapスキャンで結果を取得し、「()」とIPアドレスの間にあるリストに設定する方法を知る必要があります。
ベストアンサー1
以下のように「awk」コマンドを試してみてください。
nmap -sP 192.168.1.* | awk -F"[)(]" '/^Nmap/{Nmap=$(NF-1); C+=1} /^MAC Address/{print C"."$(NF-1) "("Nmap")" }'
出力、
1. Apple (192.168.1.21)
2. Liteon Technology (192.168.1.15)
説明する:
awkが開かれると、入力が区切り文字グループによって指定されたとおりに区切られる
-F
ことを「awk」に通知します。(
)
-F"[)(]"
これは
'/.../{...} /.../{...}'
awkのスクリプト本体です。あなたの場合、最初、2番目の/^Nmap/{Nmap=$(NF-1); C+=1}
部分だけを実行する/^MAC Address/{print C"."$(NF-1) "("Nmap")" }
か、これら2つの条件付き部分のいずれも実行しません。入力文字列または行がパターンで始まる場合にのみ指定します(または最初にのみ実行されます)^
。一致するものは角かっこ内のコードを実行します。Nmap
MAC Address
{...}
最初の部分は何をしていますか?
上記のように一致するものが見つかると、2番目のフィールド(最後のフィールドNF
(または定義された区切り文字に従ってレコードから返されたフィールドの数とその値$NF
)の値を指す)が変数に格納されますNmap
。カウンタフラグ出力のIDリストの最終一致数を計算するために使用する変数$(NF-1)
C+=1
2番目の部分は何をしていますか?
上記と同じですが、一致するものが見つかると、最初にカウンタ値が印刷され、ポイントが印刷され、^MAC Address
次に一致する行の最後に2番目のフィールドが印刷され、最後に括弧内の「Nmap」値、つまりIPが印刷されます。前のマッチラインのC
.