我有一个输出如下内容的命令:
192.168.1.1 182
192.168.1.10 300
192.168.4.50 64
我想通过sed或其他一些linux命令行工具来管道这个,并用'host'命令替换IP地址和主机名,如下所示:
web.hostname.com 182
db.hostname.com 300
search.hostname.com 64
我将如何做到这一点?
答案 0 :(得分:1)
看起来有点棘手,但应该做你需要的事情:
your_command | while read HOST NUM; do host $HOST | tr "\n" " "; echo $NUM; done
答案 1 :(得分:0)
我无法弄清楚如何让sed在替换字符串中使用命令(在反引号中)的评估,并将其中一个匹配的子表达式作为参数传递,但也许其他人可以。
如果您使用bash,可以将其输入:
while read ip whatever ; do hostname=`host $ip | grep pointer` ; \
if [ -n "$hostname" ] ; then echo `host $ip` $whatever | \
sed 's/\(^.* pointer \)\(.*\)\./\2/g' ; else echo $ip $whatever ; fi ; done
(这会尝试将主机名从响应中拉出来,如果查找结果不是主机名,则将ip地址保留为数字)