我只想删除"[]"
,"out:"
&来自输出的nameserver
,因为我首先得到文件中有nameserver
的行。
然后我再次使用awk处理并删除提到的值,我相信没有两次调用awk会有聪明的方法来做到这一点。
$ awk '/nameserver/' dns_file
[keanx61.ddl.COM] out: nameserver 192.22.48.33
[keanx61.ddl.COM] out: nameserver 192.22.48.23
[keanx61.ddl.COM] out: nameserver 172.144.71.11
$ awk '!/^$/ { gsub( /[][]|out:|nameserver/ , "" ); print $0 }' dns_file
keanx61.ddl.COM 192.22.48.33
keanx61.ddl.COM 192.22.48.23
keanx61.ddl.COM 172.144.71.11
答案 0 :(得分:2)
awk -F'[][]| +' '/nameserver/ { print $2, $NF }'
-F
选项设置输入字段分隔符,在这种情况下是一个正则表达式(用单引号保持shell不搞乱):'[][]'
匹配[
或]
,而' +'
(这是一个后跟加号的空格;空间在这里很重要!)匹配一个或多个空格。将它们与交替(“或”)运算符|
放在一起以获得'[][]| +'
会产生一个正则表达式,该表达式匹配单个方括号或任意数量的空格。
每次解析器找到字段分隔符的匹配项时,它都会启动一个新字段,因此您的名称服务器行将拆分为以下字段:
[keanx61.ddl.COM] out: nameserver 192.22.48.33
^field 1 (empty)
^field 2
^field 3 (empty)
^field 4
^field 5 ^field 6
因此,在该特定行中,$1
为""
,$2
为"keanx61.ddl.COM"
,$3
为""
,$4
是"out:"
,$5
是"nameserver"
,$6
是"192.22.48.33"
。
我们只关心主机名($2
)和IP地址;由于IP地址是最后一个字段,我们实际上不必计算过去2.我们可以只询问“最后一个字段”,$NF
。