我想创建一个 ldif 修改文件来更新 LDAP 上的用户。
我有一个输入文件(alluserdns.ldif),其中包含 ldap 中所有 Dn 条目的列表:
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
我得到的每个 dn 的输出是:
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
提取电子邮件地址。然后它会打印您想要的节,假设它找到了要打印的电子邮件地址。如果它没有找到地址,它将不会打印该节。