使用awk / bash过滤ldapsearch

时间:2016-02-20 22:34:13

标签: bash awk sed ldap openldap

编写ldapsearch命令,例如:

ldapsearch -h ipaddress -p 389 -D "cn=func_01_acc,ou=admins,dc=akademia,dc=int" \
-w akademia.01 -b "ou=stud01,dc=akademia,dc=int" "(l=Torun)" sn cn telephonenumber -LLL |
grep sn: | awk '{print $2 "|" $1}' | sort | uniq -u 

我得到了输出:

 dn: uid=s21705,ou=stud01,dc=akademia,dc=int
 telephoneNumber: +78123793414
 cn: Benny Flowers

 dn: uid=s21711,ou=stud01,dc=akademia,dc=int
 telephoneNumber: +78123439058
 cn: Jacqueline Newton

问题是:如何将其格式化为

Benny Flowers|+78123793414
JAcqueline Newton|+78123439058

我最开心的是:

ldapsearch -h ipaddress -p 389 -D "cn=func_01_acc,ou=admins,dc=akademia,dc=int" \
-w akademia.01 -b "ou=stud01,dc=akademia,dc=int" "(l=Torun)" sn cn telephonenumber -LLL |
grep sn: | grep  dn: | sed 's/telephoneNumber: //' | sed 's/cm: //'

我有:

 +123123123
 Name Surname

 +123123123
 Name Surname

我试图用以下内容反转数字和名称:

 for ((i=0;i<$elements;i++)); do
      echo ${array[${i}]}
 done

它打印输出,但我无法找到如何将值传递给临时数组以获取名称和另一个数组处理数字。

任何建议都会有所帮助。

3 个答案:

答案 0 :(得分:2)

如果您将第一个输出传输到:

sed -rn '/ telephoneNumber: /{N;s/[^:]*: (.*)\n[^:]*: (.*)/\2|\1/p;}'

你会得到:

Benny Flowers|+78123793414
Jacqueline Newton|+78123439058

在OSX上使用-En

sed会搜索每个telephoneNumber个条目,N会将该条和下一行放在一起,()将匹配名称和电话号码,最后{{1}格式化结果字符串。

答案 1 :(得分:1)

AWK

$ awk -v OFS='|' '{split($0,a,": ")} /^telephoneNumber:/{tel=a[2]} /^cn/{cn=a[2]; print cn, tel}' ldapoutput.txt 
Benny Flowers|+78123793414
Jacqueline Newton|+78123439058

$ cat foo.sh 
#!/bin/bash

while IFS=':' read -r key value; do
        case ${key} in
                cn|telephoneNumber)
                        read -r "${key}" <<<"${value## }" ;;
                *)
                        continue
                        ;;
        esac
        [ "${key}" = cn ] && printf "%s|%s\n" "${cn}" "${telephoneNumber}"
done

$ ./foo.sh < ldapoutput.txt
Benny Flowers|+78123793414
Jacqueline Newton|+78123439058

答案 2 :(得分:0)

grep -E '^(telephoneNumber|cn):' | cut -d':' -f2 | sed 's#\s##' | sed -r '$!N;s/(.*)\n(.*)/\2|\1/'