使用sed或其他命令行工具将ip地址替换为hostname

时间:2011-04-27 18:21:08

标签: linux command-line sed

我有一个输出如下内容的命令:

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

我将如何做到这一点?

2 个答案:

答案 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地址保留为数字)