You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将'VW_ABCD_EF_GHIJ_KLM_...'格式字符串转为'AbcdEfGhjKlm...'

字符串格式转换方案

针对将VW_ABCD_EF_GHIJ_KLM这类格式的字符串转换为AbcdEfGhijKlm的需求,提供以下几种实现方式:

方式一:sed + awk 组合处理

利用Bash参数扩展转小写,sed去除前缀,awk处理下划线后的字符大写:

s=VW_ABCD_EF_GHIJ_KLM
echo "${s,,}" | sed 's/^vw_//' | awk '{gsub(/_./, toupper(substr($0, RSTART+1, 1))); print}'

步骤说明:

  • ${s,,}:将变量所有字符转为小写,得到vw_abcd_ef_ghij_klm
  • sed 's/^vw_//':移除开头的vw_前缀,得到abcd_ef_ghij_klm
  • awk命令:全局匹配_加单个字符的模式,将_后的字符转大写并删除_

方式二:纯sed循环替换

通过sed的标签循环实现批量替换:

s=VW_ABCD_EF_GHIJ_KLM
echo "${s,,}" | sed -e 's/^vw_//' -e ':loop' -e 's/_\([a-z]\)/\U\1/g' -e 't loop'

步骤说明:

  • :loop定义循环入口标签
  • s/_\([a-z]\)/\U\1/g:匹配第一个_后的小写字母,将其转大写并删除_
  • t loop:如果发生替换,回到loop标签继续处理,直到所有_都被处理完

方式三:纯Bash内置处理(无外部工具)

完全依赖Bash的参数扩展和循环实现,效率更高:

s=VW_ABCD_EF_GHIJ_KLM
temp="${s,,#vw_}"
while [[ "$temp" == *_* ]]; do
    underscore_pos=$(expr index "$temp" _)
    temp="${temp/_?/${temp:underscore_pos:1^^}${temp:underscore_pos+1}}"
done
echo "$temp"

步骤说明:

  • ${s,,#vw_}:先转小写,再移除开头的vw_前缀
  • 循环检测字符串中是否还有_,每次找到_的位置后,将其后的字符转大写,拼接剩余部分,直到无_为止

内容的提问来源于stack exchange,提问作者canellas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:42:18