regex - 清理这串 sed 命令
问题描述
好的,所以我的最终目标是生成一个包含 AD 组及其成员列表的 CSV 文件。我正在使用ldapsearch
命令提取原始数据,并为与模式匹配的每个组请求“dn”和“member”属性。结果数据如下所示:
dn: CN=BLAH_GROUP1,OU=blah,OU=blah,dc=com
member: CN=John Smith,OU=blah,OU=blah,dc=com
member: CN=Dave Smith,OU=blah,OU=blah,dc=com
dn: CN=BLAH_GROUP2,OU=blah,OU=blah,dc=com
member: CN=Mike Smith,OU=blah,OU=blah,dc=com
member: CN=Chad Smith,OU=blah,OU=blah,dc=com
dn: CN=BLAH_GROUP3,OU=blah,OU=blah,dc=com
dn: CN=BLAH_GROUP4,OU=blah,OU=blah,dc=com
member: CN=Diane Smith,OU=blah,OU=blah,dc=com
member: CN=Amy Smith,OU=blah,OU=blah,dc=com
member: CN=Rebecca Smith,OU=blah,OU=blah,dc=com
有些行会换行并缩进,所以我只是忽略任何以空格开头的行。
我正在寻找的最终结果:
BLAH_GROUP1,John Smith,Dave Smith
BLAH_GROUP2,Mike Smith,Chad Smith
BLAH_GROUP2
BLAH_GROUP4,Diane Smith,Amy Smith, Rebecca Smith
我得到了我的结果,但只能通过 sed 管道输出 3 次,我只是认为可能有一种更清洁的方法可以到达那里:
当前解决方案:
ldapsearch blah | # Generate data
sed -n '/^[^ ]/s/,.*//p' | # Remove the wrapped lines and OU lists
sed ':x;/^dn{N;s/\nmember CN=/,/;bx}' | # Replace "member CN=" with "," and add to prev line
sed 's/dn: CN=//' # Remove "dn: CN="
我试过用多个-e实例运行这些,但它没有给出相同的结果。
解决方案
重写@Cyrus 的解决方案
$ awk -F'[=,]' '/^dn: / {a=$2}
/^member: / {a=a "," $2}
!NF {print a}
END {print a}' file
推荐阅读
- android - 如何在 android studio 中使用 androidx.constraintLayout 文本修复灰屏
- regex - 右端第十个符号为 1 的所有 0 和 1 字符串集合的正则表达式是什么?
- python - django 数据库查询或条件
- c# - 身份提供者在数据库中时的 AddWsFederation() (ASP.NET Core 3.1/5.0)
- vhdl - Vivado 2020.1 错误“fixed_pkg”未在库“ieee_proposed”中编译
- string - 用后缀树查找两个单词中最长的子串
- flutter - 如何将 Phantom 钱包连接到我的 Flutter Web 应用程序?
- jenkins - Jenkins批准输入步骤在中止按钮单击时返回空参数
- ibm-cloud - IBM Cloud 无法创建帐户
- python - threading - 异步逐行读取文件