【问题标题】:ldapsearch - Format output to group by userldapsearch - 将输出格式化为按用户分组
【发布时间】: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


【解决方案1】:

这种输出不能单独使用 ldap 命令。 需要将 ldap 命令的输出重定向到一个文件,然后有一个 java/shell/python 脚本来读取文件并根据需要重新格式化。

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 2023-01-28
    • 2018-03-26
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多