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

如何用sed命令提取LDAP格式字符串中的CN字段内容?

问题分析

你的原sed命令问题出在贪婪匹配上:.*会从CN=开始一直匹配到最后一个逗号之前的所有内容,完全忽略了CN值本身包含的转义逗号\,,所以无法正确提取目标内容。

修正后的sed命令

如果你的CN字段始终是LDAP字符串的第一个字段,可以用这个命令:

grep -i "CN" file | sed -E 's/^CN=([^,]*(\\,[^,]*)*),.*/\1/'

命令解释:

  • -E:启用扩展正则表达式,简化括号的转义写法
  • ^CN=:精准匹配行首的CN=,避免误匹配后续字段中可能出现的CN字符串
  • ([^,]*(\\,[^,]*)*):这个分组专门用来捕获带转义逗号的CN值:
    • [^,]*:匹配任意数量的非逗号字符
    • (\\,[^,]*)*:匹配任意次数的「转义逗号\, + 非逗号字符」组合,确保把CN值里的转义逗号也包含进去
  • ,.*/:匹配第一个未被转义的逗号及之后的所有内容,替换成前面捕获的分组内容\1

快速测试(无需文件)

如果不想用文件测试,可以直接用管道传递字符串验证效果:

echo "CN=Michael George\, Jou,OU=External,OU=User,DC=Company,DC=en" | sed -E 's/^CN=([^,]*(\\,[^,]*)*),.*/\1/'

执行后会输出预期结果:Michael George\, Jou

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:36:55