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

问题描述

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

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

任何人都可以就我如何做到这一点提供一些建议和指导吗?谢谢!!!

解决方法

请你试试:

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

输出:

S010002100050.mycorp.com

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

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

其他语言(例如 perl)可以用更少的步骤完成。