digコマンドを実行すると、次のような出力が表示されます。
dig @1.1.1.1 google.com +noall +answer +stats
; <<>> DiG 9.11.4-P1 <<>> @1.1.1.1 google.com +noall +answer +stats
; (1 server found)
;; global options: +cmd
obodrm.prod.at.dmdsdp.com. 86154 IN A 62.178.85.125
;; Query time: 1 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Wed Sep 11 15:04:35 CEST 2019
;; MSG SIZE rcvd: 70
次の「62.178.85.125」とクエリ時間1msをフィルタリングして1行に表示したいと思います。
答え1
awkを使用すると、可能なパターンに基づいて正確な一致基準を調整することが非常に簡単です。
dig @1.1.1.1 google.com +noall +answer +stats | \
awk '$3 == "IN" && $4 == "A"{ip=$5}/Query time:/{t=$4 " " $5}END{print ip, t}'
答え2
グレブを使って、
dig @1.1.1.1 google.com +noall +answer +stats | grep -oEe "\b([0-9]{1,3}\.){3}[0-9]{1,3}$" -oEe 'Query time: [0-9]+ msec'
-oEe "\b([0-9]{1,3}\.){3}[0-9]{1,3}$"
行末でIPアドレスを取得します。-oEe 'Query time: [0-9]+ msec'
grep クエリ時間。
答え3
GNUの使用sed
:
dig @1.1.1.1 google.com +noall +answer +stats | \
sed -nEz 's/.*[[:space:]]([0-9.]+)\n;; (Query time[^\n]*\n).*/\1 \2/p'
sed
オプションを使用すると、入力は1つ-z
の大きな文字列として扱われ、オプションは一致-n
する部分(/p
)のみを印刷します。 IPアドレスの後には改行文字が続くので、;; Query time
より単純な正規表現を使用してIPを一致させることができます。どちらの文字列もグループとしてキャプチャされ、(…)
入力はグループを参照して置き換えられます。\1 \2