Isso pode funcionar para você:
sed -e 's/.*cn=\([^,]*\).*/&\nchangetype: modify \nadd: mail \nmail: /'
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:.
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.