LDAP에서 사용자를 업데이트하기 위해 ldif 수정 파일을 생성하고 싶습니다.
ldap의 모든 Dn 항목 목록이 포함된 입력 파일(alluserdns.ldif)이 있습니다.
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
다음 형식의 파일을 만들고 싶습니다.
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]
입력 파일의 각 dn 항목에 대해 cn 부분([이메일 보호됨]) 이를 메일 속성으로 사용합니다.
changetype: modify
add: mail
mail:
입력 파일의 각 줄 뒤에 위의 3줄을 추가하고 추출된 cn 값을 사용합니다([이메일 보호됨])가 마지막 줄을 형성합니다.
지금까지 입력 파일의 각 dn 항목 뒤에 위의 3개 상수 줄을 추가해 보았습니다.
sed -e 's/$/\n changetype: modify \n add: mail \n mail:/' -i alluserdns.ldif
각 DNS에 대해 얻는 출력은 다음과 같습니다.
dn: [email protected], ou=persons,ou=pp,dc=abc,dc=com
changetype: modify
add: mail
mail:
이제 cn 부분을 추출하여 mail: 속성 뒤의 세 번째 줄에 사용해야 합니다.
답변1
이것은 당신에게 도움이 될 수 있습니다:
sed -e 's/.*cn=\([^,]*\).*/&\nchangetype: modify \nadd: mail \nmail: \1/'
답변2
다음과 같이 할 수 있습니다 awk
(GNU awk로만 테스트).
awk '{print $0;match($2, /=(.*),/, arr); if(arr[1]!="") {print "changetype: modify\nadd:mail\nmail: " arr[1] }}' <input file>
그러면 이메일 주소를 추출 print $0
하는 데 사용할 수 있는 각 줄이 인쇄됩니다 . match
그런 다음 인쇄할 이메일 주소를 찾았다고 가정하고 원하는 섹션을 인쇄합니다. 주소를 찾지 못하면 해당 섹션이 인쇄되지 않습니다.