我有一个看起来像这样的输入文件:
"LEVEL1","cn=APP_GROUP_ABC,ou=dept,dc=net","uid=A123456,ou=person,dc=net"
"LEVEL1","cn=APP_GROUP_DEF,ou=dept,dc=net","uid=A123456,ou=person,dc=net"
"LEVEL1","cn=APP_GROUP_ABC,ou=dept,dc=net","uid=A567890,ou=person,dc=net"
我想读取每一行,解析然后像这样输出:
A123456,ABC
A123456,DEF
A567890,ABC
换句话说,从“uid=”中检索用户 ID,然后从“cn=APP_GROUP_”中检索标识符。对每个输入记录重复,写入新的输出文件。
请注意,列位置不固定,因此不能依赖位置,我猜我必须搜索“uid=”字符串并以某种方式使用该位置?
非常感谢任何帮助。
最佳答案
您可以使用 sed
轻松完成此操作:
sed 's/.*cn=APP_GROUP_\([^,]*\).*uid=\([^,]*\).*/\2,\1/'
正则表达式捕获两个所需的字符串,并以相反的顺序输出它们,并在它们之间添加一个逗号。您可能需要根据数据的精确性质更改捕获的上下文,因为 uid=
将匹配 last uid=
在一行中,如果有多个。
关于linux - Unix (ksh) 脚本,用于读取文件、解析和仅输出某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393486/