You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非正则匹配方式:如何提取短主机名后的域名?附FQDN示例

无需正则提取FQDN中短主机名后的域名

嘿,这个需求我之前在配置监控和批量处理主机名的时候经常碰到,完全不用写复杂的正则就能搞定!核心逻辑其实特别直观——我们只需要去掉FQDN里最左边的主机部分(也就是第一个点之前的内容),剩下的就是目标域名了。下面给你拆解思路和几种常用场景的实现:

核心思路(通用所有语言)

  • 找到字符串中第一个.的位置
  • 从这个位置的下一个字符开始,截取到字符串末尾,得到的就是你要的域名部分

举个直观的例子:

  • host1.dept1.domain.com → 第一个点在host1之后,截取后得到 dept1.domain.com
  • host2.domain.com → 第一个点在host2之后,截取后得到 domain.com
  • host3.domain3.com → 第一个点在host3之后,截取后得到 domain3.com

具体语言实现

Python 代码

用原生字符串方法就能轻松处理,还能兼容异常情况:

def extract_domain(fqdn):
    first_dot_pos = fqdn.find('.')
    # 如果没有找到点(只有主机名),可以返回空或者原字符串,这里返回空
    return fqdn[first_dot_pos + 1:] if first_dot_pos != -1 else ""

# 测试示例
print(extract_domain("host1.dept1.domain.com"))  # 输出: dept1.domain.com
print(extract_domain("host2.domain.com"))        # 输出: domain.com
print(extract_domain("host3.domain3.com"))       # 输出: domain3.com

Bash 脚本实现

两种简单方法,适合批量处理主机名:

# 方法1:用cut命令按点分割,取第2段及以后的内容
echo "host1.dept1.domain.com" | cut -d '.' -f 2-

# 方法2:用Bash参数扩展,直接去掉开头到第一个点的内容
fqdn="host2.domain.com"
echo "${fqdn#*.}"

两种方式都会输出对应的域名部分,批量处理时第二种效率更高。

PowerShell 实现

适合Windows环境下的运维场景:

# 方法1:分割为两部分后取第二部分
$fqdn = "host3.domain3.com"
($fqdn -split '\.', 2)[1]

# 方法2:用字符串截取
$dotIndex = $fqdn.IndexOf('.')
$fqdn.Substring($dotIndex + 1)

-split '\.', 2的作用是把字符串按点分割成最多2段,避免后续的点干扰;Substring方法则和Python逻辑一致。

补充说明

如果遇到没有包含点的输入(比如只有host4这种纯主机名),你可以根据实际需求调整代码——比如返回原字符串、抛出提示或者返回空,上面的示例里已经做了基础的异常处理。

内容的提问来源于stack exchange,提问作者Outcast G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:46:30