Unix sed从sssd.conf中的ldap\u访问\u筛选器中提取CN
我在Unix sed从sssd.conf中的ldap\u访问\u筛选器中提取CN,unix,sed,Unix,Sed,我在sssd.conf中定义了ldap\u access\u过滤器,出于某种报告目的,我需要从定义的过滤器中提取CNs(组名) ldap\u访问\u过滤器如下 ldap_access_filter = (|(msSFU30PosixMemberOf=CN=grp1,OU=UNIX,OU=Security Groups,OU=Groups,OU=Corp,DC=my,DC=domain,DC=com)(msSFU30PosixMemberOf=CN=grp2,OU=UNIX,OU=Security
sssd.conf
中定义了ldap\u access\u过滤器
,出于某种报告目的,我需要从定义的过滤器中提取CN
s(组名)
ldap\u访问\u过滤器
如下
ldap_access_filter = (|(msSFU30PosixMemberOf=CN=grp1,OU=UNIX,OU=Security Groups,OU=Groups,OU=Corp,DC=my,DC=domain,DC=com)(msSFU30PosixMemberOf=CN=grp2,OU=UNIX,OU=Security Groups,OU=Groups,OU=Corp,DC=my,DC=domain,DC=com)(msSFU30PosixMemberOf=CN=grp3,OU=UNIX,OU=Security Groups,OU=Groups,OU=Corp,DC=my,DC=domain,DC=com)(msSFU30PosixMemberOf=CN=grp4,OU=UNIX,OU=Security Groups,OU=Groups,OU=Corp,DC=my,DC=domain,DC=com)(msSFU30PosixMemberOf=CN=grp5,OU=UNIX,OU=Security Groups,OU=Groups,OU=Corp,DC=my,DC=domain,DC=com))
我想要的输出是
grp1, grp2, grp3, grp4, grp5
或
如何使用sed
获取此输出
我是
sed
或reg-exp的新手。请帮助我虽然使用sed
当然可以做到这一点,但您可以使用grep
和awk
获得干净的解决方案
grep -o 'CN=\w+' Input.txt | awk -F= '{print $2}'
使用awk:
awk -F"=|," '{while (++i<=NF){if($i~/CN/){print $(i+1)}}}' InputFile
awk-F“=|,”{while(++i这里是一个gnuawk
(由于RS中有多个字符)
您也可以尝试此sed命令
sed -e 's/CN=\([^,]\+\)/:\1:/g' -e 's/[^:]\+.\([^:]*\)./\1 /g' FileName
输出:
grp1 grp2 grp3 grp4 grp5
注意,您的过滤器有(数据)(数据)(数据)(数据)(数据)…您还可以匹配每个CN组,并从五个组中的每个组中获取它们的值
示例
sed '/ldap_access_filter/s/.*(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)/\1, \2, \3, \4, \5/g'
grp1, grp2, grp3, grp4, grp5
来自上述命令行的结果
sed '/ldap_access_filter/s/.*(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)(.*=CN=\([[:alnum:]]*\).*)/\1, \2, \3, \4, \5/g'
grp1, grp2, grp3, grp4, grp5
由于您的筛选器位于一个文件中,因此此部分/ldap\u access\u filter/
将查找包含ldap\u access\u filter
的行(这将仅针对您的筛选器)
对于每个组,此
(.*=CN=\([[:alnum:]]*\).*)
在命令行中重复5次以上,以从5个组中提取值