如何使用sed或awk移除内部无逗号的花括号?
移除不含逗号的花括号(sed/awk实现)
需求说明
处理字符串:
ex00/{ft_strdup.c} ex04/{ft_convert_base.c,ft_convert_base2.c} ex05/{ft_split.c}
移除其中内部不含逗号的花括号,保留含逗号的花括号,最终输出:
ex00/ft_strdup.c ex04/{ft_convert_base.c,ft_convert_base2.c} ex05/ft_split.c
用sed实现
使用扩展正则表达式进行全局替换:
sed -E 's/\{([^,}]+)\}/\1/g' <<< "ex00/{ft_strdup.c} ex04/{ft_convert_base.c,ft_convert_base2.c} ex05/{ft_split.c}"
- 正则解释:
\{匹配左花括号([^,}]+)捕获花括号内不含逗号和右花括号的内容(即内部无逗号的情况)\}匹配右花括号\1用捕获到的内容替换整个{...}结构g全局替换所有符合条件的匹配项
用awk实现
借助gsub函数完成全局替换:
awk '{gsub(/\{([^,}]+)\}/,"\1"); print}' <<< "ex00/{ft_strdup.c} ex04/{ft_convert_base.c,ft_convert_base2.c} ex05/{ft_split.c}"
- 逻辑说明:
gsub(regex, replacement, target)对目标字符串(默认是$0)执行全局正则替换- 正则规则与sed一致,仅保留内部含逗号的花括号结构
内容的提问来源于stack exchange,提问作者c_beginner
相关产品推荐
相关产品推荐

