使用sed打印并执行

时间:2016-06-10 13:50:35

标签: sed

我有一个文件中的域名列表。我必须为每个域名获得“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获得这个输出,因为它最小化了代码行。

3 个答案:

答案 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