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

如何用Bash将FQDN转换为LDAP DN?精简函数或用单行命令

如何用Bash快速将FQDN转换为LDAP DN格式?

问题描述

在配置LDAP服务器的Bash脚本中,需要将完全限定域名(FQDN)转换为LDAP专有名称(DN),转换规则示例如下:

  • com → dc=com
  • world.com → dc=world,dc=com
  • hello.world.com → dc=hello,dc=world,dc=com
  • hello.beautiful.world.com → dc=hello,dc=beautiful,dc=world,dc=com

我自己实现了一个转换函数,但代码略显冗长,想了解是否有单行Bash命令可以直接实现,或者怎么精简现有函数。原函数代码如下:

#!/bin/bash 
 
function fqdn_to_ldap_dn() {  
   local fqdn parts dn                          
   fqdn="$1"              
   IFS=. parts=(${fqdn##*-})     
   dn=""                             
                              
   for i in "${parts[@]}" ; do
      dn+="dc=$i,"            
   done                           
   dn=${dn%?};                    
   echo $dn                           
}                             
                              
echo $(fqdn_to_ldap_dn "aa.hello.com")

解决方案

1. 单行sed命令实现

直接用sed即可完成转换,无需自定义函数:

# 示例:转换aa.hello.com
echo "aa.hello.com" | sed 's/\./,dc=/g; s/^/dc=/;'

工作原理:

  • s/\./,dc=/g:将字符串中所有的.替换为,dc=
  • s/^/dc=/:在字符串开头添加dc=前缀

执行后会直接输出dc=aa,dc=hello,dc=com,完全符合转换要求。

2. 精简版Bash函数

如果偏好使用函数,可以利用Bash的参数展开特性大幅简化代码:

function fqdn_to_ldap_dn() {
  echo "dc=${1//./,dc=}"
}

工作原理:

  • ${1//./,dc=}:将传入的第一个参数(FQDN)中所有的.替换为,dc=
  • 拼接前缀dc=后直接输出结果

测试示例:

fqdn_to_ldap_dn "hello.beautiful.world.com"
# 输出:dc=hello,dc=beautiful,dc=world,dc=com

3. awk实现方案

如果需要更灵活的字段处理,也可以用awk完成转换:

echo "aa.hello.com" | awk -F. '{for(i=1;i<=NF;i++) printf "dc=%s%s", $i, (i<NF?",":"\n")}'

工作原理:

  • -F.:以.作为字段分隔符拆分FQDN
  • 循环遍历每个字段,输出dc=字段名,非最后一个字段后加逗号,最后一个字段后加换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:17:24