我有一个文件中的域名列表。我必须为每个域名获得“A Record”。
输入:
:~$ cat domainlist.txt
google.com
yahoo.com
facebook.com
必需输出:
google.com
216.58.220.46
yahoo.com
98.139.183.24
206.190.36.45
98.138.253.109
facebook.com
66.220.146.36
所以,我有这个sed命令帮助我获得A记录。
sed 's/^/dig +short A/e' domainlist.txt
但它只输出IP。域名不会随之打印。
输出:
:~$ sed 's/^/dig +short a/e' domainlist.txt
98.124.199.55
188.125.73.108
74.6.50.150
77.238.184.150
98.137.236.150
199.59.243.120
我可以使用bash获得所需的输出。但是我想知道有没有办法使用sed获得这个输出,因为它最小化了代码行。
答案 0 :(得分:2)
以下是e
命令的s
标志(强调我的):
此命令允许将shell命令的输入传输到模式空间。如果进行了替换,则在模式空间中找到的命令将执行,并且模式空间将替换为其输出。尾随换行被抑制;如果要执行的命令包含空字符,则结果未定义。这是一个GNU sed扩展。
所以你删除了你想要打印的内容,但修复很简单:
$ sed 'p;s/^/dig +short A/e' domainlist.txt
google.com
98.124.199.55
yahoo.com
74.6.50.150
98.137.236.150
77.238.184.150
188.125.73.108
facebook.com
199.59.243.120
只需在替换之前打印图案空间。
答案 1 :(得分:1)
我的系统上没有Top
,但这是dig
创建的作业:
xargs
答案 2 :(得分:0)
awk
awk '{cmd="dig "$0" +short";print $0; while((cmd|getline var) > 0){ print var};close(cmd) }' domainlist.txt