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部分([Eメール保護])これをメール属性として使用します。
changetype: modify
add: mail
mail:
入力ファイルの各行の後に上記の3行を追加し、抽出されたcn値を使用します([Eメール保護]) が最後の行を形成します。
これまで、入力ファイルの各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:属性の後の3行目に使用する必要があります。
答え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
次に、印刷する電子メールアドレスを見つけたとし、必要なセクションを印刷します。アドレスが見つからない場合、そのセクションは印刷されません。