bash - 使用 awk/bash 过滤 ldapsearch

标签 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

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

任何建议都会有所帮助。

最佳答案

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

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

您将获得:

Benny Flowers|+78123793414
Jacqueline Newton|+78123439058

在 OSX 上使用 -En

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

关于bash - 使用 awk/bash 过滤 ldapsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35529922/

相关文章:

bash - 如何在 shell 中解码 URL 编码的字符串?

regex - sed替换多个xml标签

linux - 跨多行 Grep 但返回所有匹配项

python - 如何每天运行一次shell脚本?

bash - 如何在 awk 脚本中使用 shell 变量?

python - 允许 Rsync 读取 python 进程打开的文件,而不会导致 python 进程失败

unix - 查找并打印具有重复列值的行

regex - gawk - 提取文本并将其放在同一行

xcode - 如何使用 bash 查找文本字符串 --> "PROVISIONING_PROFILE[sdk=iphoneos*]"<--这个字符串有很多特殊字符

bash - 有没有一种方法可以实现不接受参数但根据名称长度而变化的 bash 函数?