如何在osx中​​过滤掉LDAP结果

时间:2017-07-11 07:52:36

标签: macos ldap

当我使用命令ldapwhoami时,它返回:

SASL/GSSAPI authentication started
SASL username: snegoesc@42.FR
SASL SSF: 112
SASL data security layer installed.
dn:uid=snegoesc,ou=2017_paris,ou=2017,ou=paris,ou=people,dc=42,dc=fr

我需要的只是这个:

SASL/GSSAPI authentication started
SASL username: snegoesc@42.FR
SASL SSF: 112
SASL data security layer installed.
uid=snegoesc,ou=2017,ou=people,dc=42,dc=fr

所以,我的问题是:如何过滤结果? 我把这个命令放在.sh文件中,所以如果我可以使用文件中的命令处理输出然后显示它,那也没关系。

1 个答案:

答案 0 :(得分:0)

使用SED

s/^dn:uid=([^,]*),ou=[^,]*,ou=([^,]*),.*ou=people,dc=42,dc=fr

它的作用:

^dn:uid=

  • dn:uid=匹配行的开头:([^,]*)
  • ,:将所有内容分组到下一个ou=[^,]*,
  • ou=...:匹配任何ou=([^,]*)
  • ou=...:捕获下一个.*ou=people,dc=42,dc=fr
  • ou=people,dc=42,dc=fr:匹配snegoesc
  • 完成的所有内容

所以以下行匹配并捕获:2017dn:uid=snegoesc,ou=2017_paris,ou=2017,ou=paris,ou=people,dc=42,dc=fr(第二个) uid=\1,ou=\2,ou=people,dc=42,dc=fr

并根据以下内容替换它:

uid=<first capture group>,ou=<second capture group>,ou=people,dc=42,dc=fr

含义:ldapwhoami | awk -F"," '$1~/^dn:/{print substr($1,4)","$3","$5","$6","$7; next}{print $0}' SASL/GSSAPI authentication started SASL username: snegoesc@42.FR SASL SSF: 112 SASL data security layer installed. uid=snegoesc,ou=2017,ou=people,dc=42,dc=fr

使用AWK (仅在gnu linux上测试,需要适应macosx awk实现)

-F","

它的作用:

  • ,:将分隔符设置为$1~/^dn:/
  • ^dn::如果第一个字段匹配dn:(即。{1}}行开头),请转到{print substr($1,4)","$3","$5","$6","$7; next}

    • print substr($1,4)","$3","$5","$6","$7:将第一个字段的子字符串从char 4打印到结尾,然后打印字段3,5,6,7
    • next:继续执行下一行而不执行以下代码
  • {print $0}:打印行