Bash Как выбрать несколько строк из файла типа ldif на основе 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), и импортировать значения строк в переменные, чтобы я мог их использовать, а затем перейти к следующему разделу.

1 ответ

Решение

Сина, я работаю с форматом 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, такие как сокращенные строки, типы изменений и так далее.

Другие вопросы по тегам