Bash 以自定义格式保存 ldapsearch 的脚本

Bash script to save ldapsearch with custom format

我正在尝试将 LDAP 上的每个用户回显到一个文本文件中,但使用的是自定义格式:

最终目标是采用以下格式:

uid=cn <mail>

例如:

jdoe=John Doe <john.doe@company.com>
jdoe1=Jane Doe <jane.doe@company.com>
...

我目前正在终端 (Ubuntu 14.04) 中执行以下操作:

echo `ldapsearch -x -h 127.0.0.1 -b "dc=company,dc=com" uid=* cn mail` >> ldap-users.txt

这是我需要的一切,但格式如下:

# extended LDIF # # LDAPv3 # base <dc=company,dc=com> with scope subtree # filter: uid=* # requesting: cn mail # # jdoe, Special Users, company.com dn: uid=jdoe,ou=Special Users,dc=company,dc=com cn: John Doe User mail: john.doe@company.com # jdoe1, People, company.com dn: uid=jdoe1,ou=People,dc=company,dc=com cn: Jane Doe mail: jane.doe@company.com # ....... # search result search: 2 result: 0 Success # numResponses: 1387 # numEntries: 1386

注意:这就是一行中的全部内容。

感谢任何帮助,

谢谢

编辑:通过更多研究,我发现我可以做到:

ldapsearch -LLL -x -h 127.0.0.1 -b "dc=covisint,dc=com" uid=* cn mail

通过添加 -LLL 将不会在输出中打印 ldap 注释。结果格式如下:

dn: uid=jdoe,ou=Special Users,dc=company,dc=com cn: John Doe User mail: john.doe@company.com ................... dn: blahblahblha... etc

所以这很有帮助,现在如果有办法删除 "uid=" 和 ",ou=...,dc=company,dc=com" 和 "cn:" 和 "mail:"

它不是特别优雅,但通过以下管道传输 ldapsearch 命令的输出似乎适用于我刚刚尝试的快速粗略测试:

| sed 's/uid=/\nuid=/'g | awk 'NR>2 { for( i=1; i<=NF; i++ ) { if ( $i ~ /uid=/ ) { printf "%s=", substr( $i, 5, index( $i, "," ) - 5 ) }; if ( $i ~ /cn:/ ) { printf "%s %s ", $(i+1), $(i+2) }; if ( $i ~ /mail:/ ) { printf "<%s>\n", $(i+1) }; } }'