我试图将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:”
答案 0 :(得分:2)
它并不是特别优雅,但通过以下方式管道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) }; } }'