Script shell - processamento de texto

2

Eu quero criar um arquivo de modificação ldif para atualizar os usuários no LDAP.

Eu tenho um arquivo de entrada (alluserdns.ldif) com uma lista de todas as entradas do Dn no ldap:

dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com

Eu quero criar um arquivo que tenha o seguinte formato:

dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
changetype: modify
add: mail
mail: [email protected]

dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
changetype: modify
add: mail
mail: [email protected]

dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
changetype: modify
add: mail
mail: [email protected]

dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
changetype: modify
add: mail
mail: [email protected]

Para cada entrada dn no arquivo de entrada, eu quero extrair a parte cn ([email protected]) e usá-la como um atributo de e-mail

changetype: modify
add: mail
mail:

as 3 linhas acima a serem adicionadas após cada linha no arquivo de entrada e use o valor cn extraído ([email protected]) para formar a última linha.

Até agora eu tentei seguir para adicionar acima de 3 linhas constantes após cada entrada dn no arquivo de entrada

sed -e 's/$/\n changetype: modify \n   add: mail \n    mail:/' -i alluserdns.ldif

A saída que recebo para cada dn é:

     dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
     changetype: modify
     add: mail
     mail:

Agora eu preciso extrair a parte cn e usá-la na terceira linha depois do atributo mail:.

    
por The Wonderer 24.07.2015 / 17:00

2 respostas

1

Isso pode funcionar para você:

sed -e 's/.*cn=\([^,]*\).*/&\nchangetype: modify \nadd: mail \nmail: /'
    
por 24.07.2015 / 17:09
0

Você pode fazer isso com awk (testado apenas com o GNU awk) como

awk  '{print $0;match($2, /=(.*),/, arr); if(arr[1]!="") {print "changetype: modify\nadd:mail\nmail: " arr[1] }}' <input file>

Isso imprimirá cada linha print $0 e, em seguida, usar match para extrair o endereço de e-mail. Em seguida, ele imprimirá a estrofe desejada, desde que encontre um endereço de e-mail para imprimir. Se não encontrar o endereço, não imprimirá essa estrofe.

    
por 24.07.2015 / 17:14