【问题标题】:Filter ldapsearch with awk/bash使用 awk/bash 过滤 ldapsearch
【发布时间】:2016-02-20 22:34:13
【问题描述】:

通过编写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

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

任何建议都会有所帮助。

【问题讨论】:

  • 在您执行 grep sn: | awk '{print $2 "|" $1}' | sort | uniq -u 之前发布 ldap 输出,我们可以为您提供帮助。我不明白如何在以sort | uniq -u 结尾的管道之后获得您所说的输出。

标签: bash awk sed ldap openldap


【解决方案1】:

如果您将第一个输出通过管道传输到:

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

你会得到:

Benny Flowers|+78123793414
Jacqueline Newton|+78123439058

在 OSX 上使用 -En

sed 将搜索每个 telephoneNumber 条目,N 将把它和下一行放在一起,() 将匹配姓名和电话号码,最后 \2|\1 格式化结果字符串。

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

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

      【讨论】:

      • 也许对它的工作原理和原因稍加评论?
      猜你喜欢
      • 1970-01-01
      • 2022-06-11
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      相关资源
      最近更新 更多