提取方括号之间的字符串并将它们排列为csv

问题描述 投票:0回答:1

我需要从多行输出中删除字符串周围的括号并将它们打印为 csv。

这是我尝试过的。

#!/bin/bash

input_string="Group [BO_analytics_Corp] in security domain [Native]: [+r+w].
Group [Tooling_Ops] in security domain [Met_LDAP]: [+r+w].
Group [Gov_tools] in security domain [Met_LDAP]: [+r+w+g]."

echo $(echo $input_string | grep -oP '(?<=\[).*?(?=\])' | tr '\n' ',')

这就是我所期待的。

BO_analytics_Corp,Native,+r+w
Tooling_Ops,Met_LDAP,+r+w
Gov_tools,Met_LDAP,+r+w+g

但这就是我运行脚本时得到的结果。

BO_analytics_Corp,Native,+r+w,Tooling_Ops,Met_LDAP,+r+w,Gov_tools,Met_LDAP,+r+w+g,
bash shell
1个回答
0
投票

这是使用

awk
的非常简单的方法。它使用括号作为字段分隔符,并打印第二、第四和第六列。

awk -F '[][]' -v OFS=, '{print $2,$4,$6}' <<< "$input_string"
BO_analytics_Corp,Native,+r+w
Tooling_Ops,Met_LDAP,+r+w
Gov_tools,Met_LDAP,+r+w+g
© www.soinside.com 2019 - 2024. All rights reserved.