如何使用sed,awk或两种工具从dig查询中提取mx记录

时间:2017-05-26 08:45:07

标签: bash awk sed

这是挖掘查询结果

$ dig gmail.com mx 

; <<>> DiG 9.9.5-3ubuntu0.14-Ubuntu <<>> gmail.com mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60118
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gmail.com.         IN  MX

;; ANSWER SECTION:
gmail.com.      1484    IN  MX  20 alt2.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  10 alt1.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  30 alt3.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  5 gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  40 alt4.gmail-smtp-in.l.google.com.

;; Query time: 1 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri May 26 14:20:53 NPT 2017
;; MSG SIZE  rcvd: 161

我想提取;;ANSWER SECTION:部分 ;;答案部分:

gmail.com.      1484    IN  MX  20 alt2.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  10 alt1.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  30 alt3.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  5 gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  40 alt4.gmail-smtp-in.l.google.com.

虽然挖掘提供了dig gmail.com mx +short的确切答案 我很好奇如果通过使用awk,sed或结合两种方式

3 个答案:

答案 0 :(得分:2)

使用Awk语句,如下所示

dig gmail.com mx | awk '$0==";; ANSWER SECTION:"{f=1; next}!NF{f=0;}f' 

根据需要获取输出。

gmail.com.      1484    IN  MX  20 alt2.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  10 alt1.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  30 alt3.gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  5 gmail-smtp-in.l.google.com.
gmail.com.      1484    IN  MX  40 alt4.gmail-smtp-in.l.google.com.

我们的想法是匹配包含您的模式的行;; ANSWER SECTION:在其出现时设置一个标志,并在 next 出现的空字段中重置它。

答案 1 :(得分:1)

使用sed:

dig gmail.com mx | sed '/;; ANSWER SECTION:/,/^$/!d;//d;'

答案 2 :(得分:0)

# dig gmail.com mx | awk '/;; ANSWER SECTION:/{p=1}!$0{p=0}p' | grep -v ANSWER
gmail.com.      3599    IN  MX  10 alt1.gmail-smtp-in.l.google.com.
gmail.com.      3599    IN  MX  40 alt4.gmail-smtp-in.l.google.com.
gmail.com.      3599    IN  MX  30 alt3.gmail-smtp-in.l.google.com.
gmail.com.      3599    IN  MX  5 gmail-smtp-in.l.google.com.
gmail.com.      3599    IN  MX  20 alt2.gmail-smtp-in.l.google.com.