我一直在使用FreeBSD设置我自己的DNS服务器,我几乎做了所有事情。
为了编写用于记录和监视区域中不同域的自定义脚本,我使用host -a -l mydomain.com
命令,该命令显示给定域中的所有子域。我正在使用> output
将此命令的输出写入文件。
问题是,输出还有一些其他数据对我来说没什么兴趣。
此命令的输出包含以下部分,
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6149
;; flags: qr aa ra; QUERY: 1, ANSWER: 45, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;unix. IN AXFR
;; ANSWER SECTION:
abc.unix
xyz.unix
Received 1108 bytes from 192.168.82.1#53 in 0 ms
无论如何,我可以简单地使用简单的终端命令将;; ANSWER SECTION:
和Received 1108 bytes from 192.168.82.1#53 in 0 ms
之间的部分写入文件?我正在阅读awk
,但我不明白如何使用它来打印命令输出的某些部分。
预期输出
abc.unix
xyz.unix
谢谢
答案 0 :(得分:3)
你是对的awk
命令对于这种情况非常方便。
尝试一下:
awk '/^;; ANSWER SECTION:/ , /^Received [0-9]* bytes from [0-9.#]* in [0-9.] ms/ {if ($0 !~ /^;; ANSWER SECTION:/ && $0 !~ /^Received [0-9]* bytes from [0-9.#]* in [0-9.] ms/) print}'
测试:
$ host -a -l mydomain.com | awk '/^;; ANSWER SECTION:/ , /^Received [0-9]* bytes from [0-9.#]* in [0-9.] ms/ {if ($0 !~ /^;; ANSWER SECTION:/ && $0 !~ /^Received [0-9]* bytes from [0-9.#]* in [0-9.] ms/) print}'
abc.unix
xyz.unix
答案 1 :(得分:3)
在awk中你可以试试这个:
awk '$0~/;; ANSWER SECTION:/{a=1; next}
(a && $0 !~/^Received/)' input
给定示例的输出
abc.unix
xyz.unix
当前行包含“;; ANSWER SECTION:”时,第一行设置a=1
。如果a=1
和当前行未以“已接收”开头,则我们会打印整行。 (如果要抑制空行,可以将&& $0 != ""
添加到(a && $0 !~/^Received/)
)
结合您的命令host -a -l mydomain.com
:
host -a -l mydomain.com | awk '$0~/;; ANSWER SECTION:/{a=1; next}
(a && $0 !~/^Received/)'
答案 2 :(得分:2)
这是一个可以使用sed
的简单要求
hostname -a -l mydomain.com | sed -n '/;; ANSWER/{n;N;p;q}'
会这样做。
输出
abc.unix
xyz.unix
q
命令很方便,因为一旦打印完所需的部分,它就会停止处理。