副标题:使用cut截取字符串并使用sed替换的坑
背景:因为公司ldap最开始使用的时候没有严格按照对应的填写,导致sn显示的是拼音字符,现在jumpserver连接ldap登录时username使用的sn字段作为显示发现显示的是拼音字符,所以需要对ldap的sn进行批量替换。
步骤一、从ldap导出所有的人员信息.csv
步骤二、《利用excle index做同表格或者不同表格的某列字段内容替换》
从人事那里要来对应的人员的邮箱和姓名。进行匹配对比
然后将sn是拼音的和sn是中文的2列拉出来保存到另外一个文件里面sn.txt
后面再说为什么要用2个=
步骤三、从ldap导出所有人员信息.ldif
sed -i '/objectclass: top/areplace: sn' export.ldif
sed -i '/objectclass: top/achangetype: modify' export.ldif
sed -i '/cn:\|gidnumber:\|homedirectory\|mail:\|objectclass\|uid\|uidnumber\|userpassword\|descript/d' export.ldif
步骤四、通过脚本替换导出的ldif文件里面的sn为拼音字符的
vim change.sh
#!/bin/bash
file1=/root/sn.txt
file2=/root/export.ldif
list=`cat $file1`
for line in $list
do
pinyinName=`echo "$line"|cut -d \= -f 2`
realName=`echo "$line"|cut -d \= -f 1`
echo $pinyinName $realName
sed -i "s/sn: $pinyinName/sn: $realName/g" "$file2"
done
PS:这里遇到了一个大坑,搞了好久,特意记录一下
sn.txt文件最开始我写的是一个=,使用cut截取的时候不知道为什么会在后面多出一些字符,后面就多加了一个=截取没有问题。这里还有一个坑就是sed在使用变量的时候要用双引号而不能使用单引号
sed -i "s/sn: $pinyinName/sn: $realName/g" "$file2"
第五步:使用ldapmodif进行修改
ldapmodify -x -D "cn=Manger,dc=XXXX,dc=com" -W -f changesn.ldif
第六步:删除已经离职的同事的ldap账号
导出离职的sn的账号
第七步:修改导出的ldif文件
sed -i '/cn:\|gidnumber:\|homedirectory\|mail:\|objectclass\|uid\|uidnumber\|userpassword\|descript\|sn/d' export.ldif
sed -i '/dn:/achangetype: delete' export.ldif
cat export.ldif|more
第八步:通过ldapmodify命令删除
ldapmodify -xD "cn=Manager,dc=yuantu,dc=com" -w yuantu -f export.ldif
中间走到了一个误区,一直用ldapdelete命令来-f,其实是不对的,-f参数需要通过ldapmodify来执行,配合changetype: delete即可
俗话曰:好记性不如烂笔头。这个日常工作中的一遍实操blog。欢迎大家批评指正,以后将用更多的日常工作中的文档作为记录和分享。