使用 sed 将 IP 地址转换为公司标准的 DNS 名称?

Using sed to convert IP address to company-standard DNS name?

我有一个 COTS 产品,它要求我们使用 DNS 名称而不是 IP 地址设置特定配置 属性。幸运的是,我们公司标准化了 class 服务器的 DNS 名称。例如,10.2.100.50 的 IP 将具有 S010002100050.mycorp.com 的 DNS 名称。也就是说,它从 IP 地址中提取每个八位字节,在前面加上足够多的 0,使该值恰好有 3 个字符,然后附加 DNS 后缀。简单吧?

我的问题是,我需要获取 IP 地址并将其转换为 DNS 名称,以便在自动服务器配置期间应用它。我不是最擅长 sed 的,但我认为它可以用来做这件事。不幸的是,我终生无法弄清楚如何做。我遇到了几个相关的 Whosebug 问题 (question 1, question 2),这些问题讨论了前置 0,但尽管我尽我所能,但我无法让它按预期工作。

谁能给我一些建议和指导,告诉我如何才能做到这一点??谢谢!!!

你要不要试试:

ip="10.2.100.50"
sed -E 's/([0-9]+)/00/g; s/0*([0-9]{3})//g; s/\.//g; s/(.*)/S.mycorp.com/' <<< "$ip"

输出:

S010002100050.mycorp.com

我不得不将过程分为四个步骤:

  • s/([0-9]+)/00/g 为每个八位字节添加“00”。
  • s/0*([0-9]{3})//g 从每个八位字节中提取最后三位数字。
  • s/\.//g 删除点。
  • s/(.*)/S.mycorp.com/ 附加后缀。

其他语言,例如 perl 可能会用更少的步骤完成。