gpt4 book ai didi

shell - Grepping 或 awking LDAP 记录 : how?

转载 作者:行者123 更新时间:2023-12-04 18:12:32 26 4
gpt4 key购买 nike

我不是一个经验丰富的 shell 脚本编写者,所以我希望得到一些专家的帮助!

我们在遍历 UID 的 for 循环中使用以下命令:

ldapsearch -x -H ldaps://ldap-purple.example.com -b ou=People,dc=example,dc=com uid=jdoe

此命令产生如下记录:
# extended LDIF
#
# LDAPv3
# base <ou=People,dc=example,dc=com> with scope subtree
# filter: uid=jdoe
# requesting: ALL
#

# jdoe, people, example.com
dn: uid=jdoe,ou=people,dc=example,dc=com
cn: John Doe
homeDirectory: /afs/rats.example.com/users/t/jdoe
loginShell: /bin/bash
objectClass: posixAccount
uid: jdoe
uidNumber: 9239
gidNumber: 100002

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

我想做的是能够 grep 或 awk (或其他)然后在同一行生成“cn”、“uid”和“uidNumber”,即
John Doe, jdoe, 9239

但是,我不确定可以使用什么工具来创建它。

提前感谢您的帮助!

干杯,丹

最佳答案

是的,用 awk 很容易。鉴于您说这是在循环中运行,我正在草拟一个带有基本循环的解决方案,它可能与您正在做的事情相匹配,也可能不匹配。希望您会看到如何适应您的确切需求。

while read ou dc1 dc2 uid ; do
dapsearch -x -H ldaps://ldap-purple.example.com -b ou="$ou",dc1="$dc1",dc="$dc2" uid="$uid" \
| gawk -F":" '
$1=="cn" { cn = $2; sub(/^ */,"", cn); next}
$1=="uid" { uid = $2; sub(/^ */,"", uid);next}
$1=="uidNumber" { uidNumber = $2; sub(/^ */,"", uidNumber );next}

# ... etc
END {
printf("%s,%s,%s\n", cn,uid,uidNumber)
}
'
done < /path/to/ldap_lookup.lst

输出
John Doe,jdoe,9239

(使用上面的示例记录作为输入)

如果出于某种原因您想要记录中的前导空格,请取出 sub()命令。

我没有 ldapsearch 可以测试。如果您收到错误消息,gawk 可以很好地显示问题所在,如果它不是准确识别问题点的位置,那么通常在此之前。将错误消息作为评论发布,我会看看我能做什么。

IHTH

关于shell - Grepping 或 awking LDAP 记录 : how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12327196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com