Shell脚本-文本处理

Shell脚本-文本处理

我想创建一个 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提取电子邮件地址。然后它会打印您想要的节,假设它找到了要打印的电子邮件地址。如果它没有找到地址,它将不会打印该节。

相关内容