Bash脚本:修改路径中各目录首字母为小写(Bitbucket Pipeline用)
解决路径目录首字母转小写的问题
方法1:使用GNU Sed(适配Bitbucket Pipeline环境)
你原来的sed命令问题在于没正确使用大小写转换的扩展语法,也没通过捕获组单独处理大写字母。正确命令如下:
Line="database/Seeders/Entities/Users/Earnings/UserEarningsReportSeeder" echo "$Line" | sed -E 's/\/([A-Z])/\/\L\1/g'
-E启用扩展正则,允许用()捕获匹配内容\/([A-Z])匹配/后的大写字母并捕获到分组1\/\L\1替换为/加上分组1内容的小写形式(\L是GNU Sed的扩展语法,用于将后续字符转小写)
执行后会输出目标结果:database/seeders/entities/users/earnings/userEarningsReportSeeder
方法2:纯Bash实现(不依赖外部工具)
如果环境缺少GNU Sed,也可以用Bash内置语法完成:
Line="database/Seeders/Entities/Users/Earnings/UserEarningsReportSeeder" IFS='/' read -ra parts <<< "$Line" result="" for part in "${parts[@]}"; do lower_first="${part,}" # Bash 4+支持的语法,将字符串首字母转小写 result+="${result:+\/}$lower_first" done echo "$result"
- 用
IFS='/'将路径拆分为数组元素 - 遍历每个元素,通过
${part,}转换首字母为小写 - 重新拼接成完整路径
原命令失效的原因
你写的sed 's/\/[A-Z]/\/L&/g'只是把/X替换成/L/X(&代表整个匹配内容),根本没有实现大小写转换,而且\L的用法错误,必须结合捕获组才能单独转换大写字母部分。
内容的提问来源于stack exchange,提问作者Jonus1993
相关产品推荐
相关产品推荐

