如何仅用Bash字符串操作与正则去除字符串重复连续字符?
仅用Bash字符串操作与正则去除连续重复字符
Hey there! 我懂你想完全依靠Bash原生的字符串操作和正则表达式,不用sed、awk这类外部工具来去掉字符串里的连续重复字符——比如把var="aabbcc112233"处理成abc123对吧?其实Bash自带的参数扩展就支持正则替换,刚好能搞定这个需求。
先给你直接上可行的实现代码:
var="aabbcc112233" # 全局替换连续重复的字符为单个字符 result="${var//(.)\1/\1}" echo "$result" # 输出结果:abc123
简单解释一下原理:
这里用到的是Bash的模式替换参数扩展,语法${变量//匹配模式/替换内容}里的//表示全局替换(如果只写/就只会替换第一个匹配项)。
- 正则模式
(.)\1:(.)会捕获任意单个字符(存为第一个捕获组),\1引用这个捕获组,所以整个模式匹配的是连续两个相同的字符。 - 替换内容
\1:把连续重复的两个字符替换成单个,全局替换后所有连续重复的字符都会被压缩成单个。
⚠️ 注意:这个特性需要你的Bash版本在4.0及以上,早期版本不支持在参数扩展里使用正则捕获组。可以用bash --version查看当前版本。
如果你之前写的错误代码可以贴出来,我还能帮你具体分析哪里出了问题~
内容的提问来源于stack exchange,提问作者Morogorn
相关产品推荐
相关产品推荐

