【问题标题】:Using sed to convert IP address to company-standard DNS name?使用 sed 将 IP 地址转换为公司标准的 DNS 名称?
【发布时间】:2021-05-15 16:50:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: sed dns ip-address ipv4 string-substitution


    【解决方案1】:

    请你试试:

    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 等其他语言可以用更少的步骤完成。

    【讨论】:

    • 工作就像一个魅力!谢谢!
    猜你喜欢
    • 2013-11-13
    • 2020-05-19
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多