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

如何使用正则表达式提取LDIF文件中指定的完整多行LDAP条目

原命令失效原因

默认grep为逐行匹配模式,你编写的跨行正则无法在默认模式下生效,同时正则语法不符合POSIX规范,因此没有输出。

实现方案

方案1:awk实现(全平台兼容)

这是最稳定的方案,无需依赖特定版本的工具:

awk '/^dn: cn=name,ou=People,dc=example,dc=com/{flag=1} /^# entry-id:/{if(flag) exit} flag' 你的ldif文件路径.ldif

逻辑说明:

  • 匹配到目标dn开头的行时,将输出标记flag设为1
  • 匹配到# entry-id:开头的行时,如果flag为1则直接退出程序,停止输出
  • flag为1时打印所有当前行,最终输出的内容就是从目标dn开始到entry-id前的完整条目

如果需要匹配任意dn开头的条目,将第一部分的dn匹配规则改为/^dn:.+/即可。

方案2:GNU grep实现(适用Linux、带GNU工具的macOS环境)

通过-z参数将整个文件按NULL字符分割为单个字符串,实现跨行匹配:

grep -zPo 'dn: cn=name,ou=People,dc=example,dc=com.*?(?=\n# entry-id:)' 你的ldif文件路径.ldif

参数说明:

  • -z:用NULL字符作为行分隔符,将整个文件读为单行字符串
  • -P:启用Perl正则语法支持
  • -o:仅输出匹配到的内容
  • (?=\n# entry-id:):正向预查,匹配到# entry-id:前的内容为止,不会把分隔标识包含在结果中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:45:05