【问题标题】:bash replace ip with hostname using nslookup on a filebash 在文件上使用 nslookup 将 ip 替换为主机名
【发布时间】:2014-02-17 17:05:32
【问题描述】:

我有一个输出此信息的临时文件

1.2.3.4 34
1.2.3.5 23
1.2.3.6 22

第一列是ip地址,第二列是与数据库的simultaneos连接,我需要输出第一列不是IP地址而是主机名,并保留第二列的信息

期望的输出

hostname1 34
hostname2 23
hostname3 22

提前谢谢...

【问题讨论】:

  • 所以要和/etc/hosts中的数据合并?
  • 所以你想要像 sed -i.bak s/1.2.3./hostname/g tempfile 一样?

标签: bash nslookup


【解决方案1】:

可能是这样的:

#!/bin/bash
while read ip n
do
   # Uncomment following to use /etc/hosts
   # name=$(awk -v ip=$ip '$1 ~ ip{print $2}' /etc/hosts)
   # Uncomment following to use nslookup
   # name=$(nslookup $ip| grep "name ="|sed 's/.*=//')
   # Uncomment following line to use dig (thanks to Charles Duffy)
   # name=$(dig +short -x $ip)
   echo $name $n
done < file

【讨论】:

  • 我建议提供一个使用dig -x +short 的选项——比nslookup 更有可能出现在现代系统上。
  • ...在Linux上,还有read -r _ name _ &lt; &lt;(getent hosts "$ip")的选项,有使用系统解析器的好处。
【解决方案2】:

不完全确定您想要实现什么,但这将真正获得“所需的输出”

awk 'BEGIN {x = 1} {printf "hostname%s %s\n", x, $2; x += 1}' tempfile

【讨论】:

  • 嗨,也许我对此不太清楚,但我需要的是输出我拥有的 ip 地址的主机名,以前的答案完全符合我的需要,非常感谢您采取一些是时候回答了!
【解决方案3】:

logresolveapache2-utils 怎么样?它检测看起来像 IP 地址的内容并将其替换为解析的主机名:

$ cat tempfile
1.2.3.4 34
1.2.3.5 23
1.2.3.6 22

$ cat tempfile | logresolve
hostname1 34
hostname2 23
hostname3 22

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2017-07-28
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多