Bash脚本提取方括号内字符串并转为CSV格式的问题
解决Bash脚本输出未按行分隔的问题
问题原因
你的脚本里echo $input_string没有用双引号包裹,导致原字符串中的换行符被Shell替换成空格,所有行合并成一行处理。后续grep提取的所有括号内容被一次性转换成逗号分隔的单行,自然无法按原行分组。
修正方案1:逐行处理+paste合并
#!/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 "$input_string" | while IFS= read -r line; do # 提取当前行的括号内容,用逗号连接输出 echo "$line" | grep -oP '(?<=\[).*?(?=\])' | paste -sd ',' done
修正方案2:用awk直接分割(更简洁)
#!/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 "$input_string" | awk -F'[][]' '{print $2","$4","$6}'
输出结果
两种方案都能得到你期望的CSV格式:
BO_analytics_Corp,Native,+r+w Tooling_Ops,Met_LDAP,+r+w Gov_tools,Met_LDAP,+r+w+g
内容的提问来源于stack exchange,提问作者bob freeman
相关产品推荐
相关产品推荐

