シェルスクリプト - テキスト処理

シェルスクリプト - テキスト処理

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次に、印刷する電子メールアドレスを見つけたとし、必要なセクションを印刷します。アドレスが見つからない場合、そのセクションは印刷されません。

関連情報