【发布时间】:2021-05-25 01:47:41
【问题描述】:
我有一个 ldapsearch 查询,例如:
ldapsearch -Y GSSAPI -b dc=level1,dc=level2,dc=level3 '(userid=123)' userid,email1,email2,email3
这将为 user123 返回以下内容:
mail1: something1@test.com
mail2: something2@test.com
mail3: something3@test.com
userid: 123
问题是,我不会只为 user123 这样做——我会为成千上万的用户这样做。理想情况下,我希望输出是这样的,每个用户一行:
123,something1@test.com,something2@test.com,something3@test.com
456,else1@test.com
789,other1@test.com,other2@test.com
...
或者更好的是:
123,something1@test.com
123,something2@test.com
123,something3@test.com
456,else1@test.com
789,other1@test.com
789,other2@test.com
...
请注意,用户可以拥有不同数量的电子邮件地址。有没有办法实现这种格式?现在,我有这样的事情:
ldapsearch -Y GSSAPI -b dc=level1,dc=level2,dc=level3 '(userid=123)' userid,email1,email2,email3 | grep -E '^userid:*|^mail1:*|^mail2:*|^mail3:*' | sed 's/^ *//' | awk '!seen[$0]++'
对于 user123,这让我明白了:
something1@test.com
something2@test.com
something3@test.com
123
但如果我添加 | paste -sd ',',它将连接所有 100k+ 用户的结果。我希望每个用户有一行。
【问题讨论】:
-
所有用户是否最多有 3 个电子邮件属性?用户 ID 将来自哪里?必须是
ldapsearch吗? -
是的,我正在使用 ldapsearch。用户可以拥有任意数量的电子邮件属性。
-
ldapsearch 输出中的属性可能未按预期排序(uid,然后是邮件),它可能用于一个条目,但不能用于另一个条目(mail、mail1、uid)。您可能需要使用 ldap 客户端(@see python-ldap)。
标签: unix sed grep formatting ldap