我在一家提供网站托管和DNS服务的公司工作。我们正在尝试将所有内容迁移到新服务器,并且我们经常在我们的服务器上遇到陈旧的区域文件,因为客户已将其权威服务器更改为其他人。
我正在尝试编写一个脚本来检查whois,ns和SOA信息,以确定域是否仍将我们用作权威服务器。
我正在尝试使用sed
来过滤以下内容的输出,以仅显示没有尾随“。”的名称服务器:
dig +noall +answer soa yahoo.com | sed 's/.*SOA\s*//' | sed 's/\.$//'
我搜索过网络,但是大多数sed命令示例都在“行”而不是“单词”上工作。
所需的输出如下:
$ dig +noall +answer soa yahoo.com | sed '<Some SED code here>'
ns1.yahoo.com
任何建议都会有所帮助。
答案 0 :(得分:3)
我建议使用括号内的子表达式来识别您想要的位,而不是使用删除您不想要的部分,如下所示:
dig +noall +answer soa yahoo.com | sed 's/.*SOA\s*//' | sed 's/^\([^ ]*\). .*/\1/g'
这将搜索以某些非空格字符开头的字符串,后跟一个点,一个空格,然后是该行的其余部分。它只用点前的位(即子表达式#1)替换该模式。
答案 1 :(得分:3)
使用结构化数据时,更容易使用awk
$ dig +noall +answer soa yahoo.com | awk '{sub(/.$/,"",$5);print $5}'
ns1.yahoo.com
答案 2 :(得分:2)
计算一行中的字数:
awk '{ print NF }'
例如:
printf 'foo bar\nbar\nfoo bar zim' | awk '{ print NF }'
打印:
2
1
3