非正则匹配方式:如何提取短主机名后的域名?附FQDN示例
无需正则提取FQDN中短主机名后的域名
嘿,这个需求我之前在配置监控和批量处理主机名的时候经常碰到,完全不用写复杂的正则就能搞定!核心逻辑其实特别直观——我们只需要去掉FQDN里最左边的主机部分(也就是第一个点之前的内容),剩下的就是目标域名了。下面给你拆解思路和几种常用场景的实现:
核心思路(通用所有语言)
- 找到字符串中第一个
.的位置 - 从这个位置的下一个字符开始,截取到字符串末尾,得到的就是你要的域名部分
举个直观的例子:
host1.dept1.domain.com→ 第一个点在host1之后,截取后得到dept1.domain.comhost2.domain.com→ 第一个点在host2之后,截取后得到domain.comhost3.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
相关产品推荐
相关产品推荐

