Bash 如何 Select 基于 dn 的 ldif 类型文件中的多行
Bash How To Select Multiple Lines from ldif-type File based on dn
我想知道如何最好地解析 ldif 文件(和类似 ldif 的文件),以便我可以将每个 DN 条目及其关联的属性导入变量,而无需交叉到其他 DN 及其属性,因为一切都是在一个文件中。
请问这是怎么做到的?
感谢您帮助菜鸟。
编辑:
一个类似于 ldif 的文件示例如下所示:
dn: cn=admins,cn=groups,cn=accounts,dc=mydom,dc=com
Group name: admins
Description: Account administrators group
GID: 721800000
Member users: admin, user2, user1
ipauniqueid: 2dafa3a2-b903-11e2-8a28-525400a60ac3
objectclass: top, groupofnames, posixgroup, ipausergroup, ipaobject, nestedGroup
dn: cn=editors,cn=groups,cn=accounts,dc=mydom,dc=com
Group name: editors
Description: Limited admins who can edit other users
GID: 721800002
Member users: user1
ipauniqueid: 2dc4446a-b903-11e2-a2fa-525400a60ac3
objectclass: top, groupofnames, posixgroup, ipausergroup, ipaobject, nestedGroup
dn: cn=employees,cn=groups,cn=accounts,dc=mydom,dc=com
Group name: employees
Description: Default group for all Qrios employees
GID: 721800006
Member users: user2, user3
ipauniqueid: 134ae6e0-b910-11e2-a7f3-525400a60ac3
objectclass: top, groupofnames, nestedgroup, ipausergroup, ipaobject, posixgroup
我希望能够根据第一个关键字 (dn) select 部分文件,并将行的值导入变量以便我可以使用它们,然后移至下一节。
sina,我经常使用 LDIF 格式,但 bash 就是不喜欢它。
我强烈建议您开始使用 perl 或 python 及其各自的 LDAP 模块:
只是 perl 及其 LDAP 模块的一个小例子:
# Read in the LDIF file specified in $input_file
my $ldif = Net::LDAP::LDIF->new($input_file, "r", onerror => 'warn', change => 1);
#
# Process the LDIF input file
#
while($entry = $ldif->read())
{
# Get the Member attribute
my @mbr = $entry->get_value('Member');
foreach my $value (@mbr)
{
# Here you have a 'Member' value in $value, do what you want
}
}
如您所见,这让事情变得非常简单。此外,这些模块还考虑了 LDIF 中的所有不同约定,例如缩写行、更改类型等。
我想知道如何最好地解析 ldif 文件(和类似 ldif 的文件),以便我可以将每个 DN 条目及其关联的属性导入变量,而无需交叉到其他 DN 及其属性,因为一切都是在一个文件中。
请问这是怎么做到的?
感谢您帮助菜鸟。
编辑: 一个类似于 ldif 的文件示例如下所示:
dn: cn=admins,cn=groups,cn=accounts,dc=mydom,dc=com
Group name: admins
Description: Account administrators group
GID: 721800000
Member users: admin, user2, user1
ipauniqueid: 2dafa3a2-b903-11e2-8a28-525400a60ac3
objectclass: top, groupofnames, posixgroup, ipausergroup, ipaobject, nestedGroup
dn: cn=editors,cn=groups,cn=accounts,dc=mydom,dc=com
Group name: editors
Description: Limited admins who can edit other users
GID: 721800002
Member users: user1
ipauniqueid: 2dc4446a-b903-11e2-a2fa-525400a60ac3
objectclass: top, groupofnames, posixgroup, ipausergroup, ipaobject, nestedGroup
dn: cn=employees,cn=groups,cn=accounts,dc=mydom,dc=com
Group name: employees
Description: Default group for all Qrios employees
GID: 721800006
Member users: user2, user3
ipauniqueid: 134ae6e0-b910-11e2-a7f3-525400a60ac3
objectclass: top, groupofnames, nestedgroup, ipausergroup, ipaobject, posixgroup
我希望能够根据第一个关键字 (dn) select 部分文件,并将行的值导入变量以便我可以使用它们,然后移至下一节。
sina,我经常使用 LDIF 格式,但 bash 就是不喜欢它。 我强烈建议您开始使用 perl 或 python 及其各自的 LDAP 模块:
只是 perl 及其 LDAP 模块的一个小例子:
# Read in the LDIF file specified in $input_file
my $ldif = Net::LDAP::LDIF->new($input_file, "r", onerror => 'warn', change => 1);
#
# Process the LDIF input file
#
while($entry = $ldif->read())
{
# Get the Member attribute
my @mbr = $entry->get_value('Member');
foreach my $value (@mbr)
{
# Here you have a 'Member' value in $value, do what you want
}
}
如您所见,这让事情变得非常简单。此外,这些模块还考虑了 LDIF 中的所有不同约定,例如缩写行、更改类型等。