可以解析 ldapsearch 输出吗?

可以解析 ldapsearch 输出吗?

我有一个 ldapsearch 查询来提取电子邮件系统的一些数据,我试图将数据解析为可以在表格/平面文件中分析的内容,并生成有关帐户的报告。

ldapsearch 输出的示例:

# scott, people, example3.org
dn: uid=scott,ou=people,dc=example3,dc=org
zimbraCOSId: 3f5exxxf-08eb-439a-8d93-cef26b03b722
zimbraMailDeliveryAddress: [email protected]
zimbraLastLogonTimestamp: 20161019154312Z
zimbraPrefMailForwardingAddress: [email protected]

# info, people, example5.org
dn: uid=info,ou=people,dc=example5,dc=org
zimbraMailDeliveryAddress: [email protected]
zimbraCOSId: e2zzy7e74-e4bf-462d-a4b1-7d7b23c31fbe
zimbraPrefMailForwardingAddress: [email protected]
zimbraLastLogonTimestamp: 20181011075800Z

用于拉取测试数据的搜索命令:

ldapsearch -H $ldap_master_url -w $zimbra_ldap_password -D $zimbra_ldap_userdn -S -LLL -x "(&(objectClass=zimbraAccount)(!(objectclass=zimbraCalendarResource)))" zimbraMailDeliveryAddress zimbraLastLogonTimestamp zimbraPrefMailForwardingAddress | awk '$1=$1' RS= ORS='\n' OFS=';'

以下是我尝试过的:

| awk '$1=$1' RS= ORS='\n' OFS=';'

然后我还使用 grep 进一步修剪它,但并非所有记录都具有相同的属性或相同的顺序,因此输出很混乱。

我期望的输出:

上述属性的值采用按行分隔的样式。

IE:

[电子邮件保护],20161019154312Z,[电子邮件保护] [电子邮件保护],20181011075800Z,[电子邮件保护]

将研究 sed 是否可以收集信息,因为记录之间的值顺序不同,这似乎很奇怪。我有更多的数据字段要添加,但很难解析输出。

谢谢

答案1

使用 awk 应该相当简单。这是一个解决方案

awk '/^zimbraMail/ {addr = $2} /^zimbraLastL/ {timestamp = $2} /^zimbraPrefMailF/ {forward = $2; print addr "," timestamp "," forward}'

您要做的是使用模式匹配/.../并将所需字段存储在变量中,最后将其打印出来

相关内容