【问题标题】:using bash with sed how to extract ip from a host command and saving it in /etc/hosts file使用 bash 和 sed 如何从主机命令中提取 ip 并将其保存在 /etc/hosts 文件中
【发布时间】:2020-07-13 15:53:31
【问题描述】:

我想知道是否有办法通过使用 bash 脚本 (.sh) 执行以下操作将条目写入 /etc/hosts 文件

  1. 获取主机命令的 ip,例如(可以是任何网址)

托管 cloud.com

  1. 结果如下:

cloud.com 的地址为 50.17.245.212

  1. 最后,我想在 /etc/hosts 文件中插入以下内容:

50.17.245.212 ip-50-17-245-212

注意:第一个 IP 是 URL 的,然后是它以 -ip 为前缀,然后将点替换为“-”

我尝试使用 dig,但结果很长,希望在这里提供任何指针。

【问题讨论】:

  • ... 你为什么还要这个?所以你有一个 URL,你检查网站是否存在,如果它存在,而不是将它添加到 /etc/hosts 文件中(如条目“cloud.com 50.17.245.212”你发明另一个主机名,纯粹基于IP,并将其添加到 /etc/hosts 文件而不参考原始 URL?
  • 这能回答你的问题吗? Ip host script bash
  • @alecxs - 不完全
  • @Dominique - 用于实验。我知道你在说什么,但我需要这样做。
  • 使用 dig 的正确方法是使用 +short (dig +short cloud.com),但 alexcs 的 oneliner 无论如何都可以使用。

标签: bash sed


【解决方案1】:

单个 (GNU) sed 命令:

host cloud.com |
sed -E -n 's/.* has address (([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)).*/\1 ip-\2-\3-\4-\5/p'

根据需要重定向输出,例如>> /etc/hosts

【讨论】:

    【解决方案2】:
    url=cloud.com
    

    空格作为 cut 的分隔符,仅打印第 4 个字段

    ip=$(host $url | cut -d ' ' -f4)
    

    或 grep 的正则表达式仅有效的 ipv4/ipv6

    ip=$(host $url | grep -ioE '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) | (([a-f0-9:]+:+)+[a-f0-9]+)')
    

    使用字符串操作// 回显变量// 替换+() 多次出现的[.:] 点或冒号/-

    echo "$ip ip-${ip//+([.:])/-}" | tee -a /etc/hosts
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多