首页 > 解决方案 > sed 用“”替换特殊字符

问题描述

我尝试解析这样的输出terraform output

terraform output -json all_admins |
sed -e "s/,/;\n/g" -e "s/^(\[|\])//g"
terraform output -json all_admins

导致:

["admin1@admin.com","admin2@admin.com"]

当前结果:

terraform output -json all_admins |
sed -e "s/,/;\n/g" -e "s/^(\[|\])//g"

导致:

["admin1@admin.com";
"admin2@admin.com"]

预期结果:

"admin1@admin.com";
"admin2@admin.com"

我怎样才能优雅地摆脱[]在 sed 中使用正则表达式?

标签: regexlinuxparsingsed

解决方案


您可以使用:

terraform output -json all_admins | sed 's/[][]//g; s/,/;\
/g'

# Example:
s='["admin1@admin.com","admin2@admin.com"]'
echo "$s" | sed 's/[][]//g; s/,/;\
/g'

"admin1@admin.com";
"admin2@admin.com"

确保未转义]位于括号位置内的第一个位置[...],然后[是下一个。

请注意,这sed 's/[][]//g' file相当于sed -E 's/\]|\[//g' file


推荐阅读