当我使用命令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文件中,所以如果我可以使用文件中的命令处理输出然后显示它,那也没关系。
答案 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
所以以下行匹配并捕获:2017
和dn: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}
:打印行