Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用sed、awk或这两种工具从dig查询中提取mx记录_Bash_Awk_Sed - Fatal编程技术网

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

Bash 如何使用sed、awk或这两种工具从dig查询中提取mx记录,bash,awk,sed,Bash,Awk,Sed,这是dig查询结果 $ 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, AN

这是dig查询结果

$ 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
虽然dig提供了确切的答案,但它只是
dig gmail.com mx+short

我想知道是否有办法使用awk、sed或两者结合使用使用
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.
这样做的目的是匹配包含模式的行
;;回答部分:
在其出现处设置一个标志,并在下一个出现的空字段处重置它。

使用sed:

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

是的,我试过了。。dig gmail.com mx|awk'BEGIN{RS=“\n”;}{print$NF;}。。。我正在努力解决这个问题。如果我知道一个好的答案,我就不会在这里问了。也许您可以在最后强调标志
f
的重要性。
dig gmail.com mx | sed '/;; ANSWER SECTION:/,/^$/!d;//d;'
# 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.