linux - Unix (ksh) 脚本,用于读取文件、解析和仅输出某些列

标签 linux bash shell unix ksh

我有一个看起来像这样的输入文件:

"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/

相关文章:

linux - 当我启动我的 ubuntu 机器时自动启动 rails server

linux - 如何检查 Linux 控制台屏幕保护程序是否有黑屏

从主端更改伪 tty 回显模式

linux - 如何探索 Symfony AcmeDemoBundle 页面和代码

node.js - 可靠地确定使用什么 shell(cmd、bash 等)来运行 node.js 脚本

bash 序列 00 01 ... 10

bash - 如何在 bash 中结合 awk 和 if

linux - 如何在 linux 中查找文件和大小

linux - 首选终端脚本语言

shell - makefile 中的 sed,用法