我需要从多行输出中删除字符串周围的括号并将它们打印为 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,
这是使用
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