我想知道如何最好地解析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)选择文件的各个部分,并将这些行的值导入变量中,以便我可以利用它们,然后移至下一部分。

最佳答案

新浪网,我正在使用LDIF格式很多,bash并没有削减它。
我强烈建议您开始将perl或python与各自的LDAP模块一起使用:


http://ldap.perl.org/
http://www.python-ldap.org/


只是带有LDAP模块的perl的一个小例子:

# 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中的所有不同约定,例如缩写行,更改类型等。

关于linux - Bash如何从基于dn的ldif类型的文件中选择多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30602711/

10-13 05:01