Mac OS High Sierra下蛇形命名转驼峰命名失败求助
解决Mac上sed转换驼峰命名失败的问题
这问题我太熟悉了!Mac自带的sed是BSD版本,和Ubuntu用的GNU sed语法差异不小,尤其是大小写转换的转义序列和标志位支持这块,这就是你遇到报错和奇怪输出的核心原因。咱们一步步拆解解决:
为什么你的命令在Mac上失效?
- 第一次报错里的
bad flag in substitute command: 'i':BSD sed的s命令不支持i(忽略大小写)标志,只有GNU sed支持。 - 第二次输出
myUamazingUlongUvariable:BSD sed不认识\U这种转义序列(用来把后续字符转大写),直接把\U当成普通字符串输出了,自然就出现了多余的U。
解决方案一:用GNU sed(gsed)兼容原命令
Mac上可以通过Homebrew安装GNU版本的sed(叫gsed),这样就能直接复用你原来的逻辑:
- 先安装GNU sed:
brew install gnu-sed
- 把命令里的
sed换成gsed:
echo "my amazing-long_variable" | gsed -E 's/[ |_|-]([a-z])/\U\1/gi' | gsed -E 's/^([A-Z])/\l\1/'
执行后就能得到你想要的myAmazingLongVariable。
解决方案二:用awk实现跨平台驼峰转换(无需额外安装)
如果不想装额外工具,awk是更好的跨平台选择,它的大小写转换函数toupper()/tolower()在Mac和Ubuntu上都能正常工作:
echo "my amazing-long_variable" | awk '{ # 把所有分隔符(空格、下划线、连字符)统一换成空格 gsub(/[-_ ]/, " "); # 按空格拆分字符串为单词数组 split($0, words, " "); # 第一个单词保持全小写 result = tolower(words[1]); # 从第二个单词开始,首字母大写,其余部分保持原样 for (i=2; i<=length(words); i++) { result = result toupper(substr(words[i], 1, 1)) substr(words[i], 2); } print result; }'
这个命令在Mac和Ubuntu上都能直接输出正确的驼峰命名,完全不需要依赖第三方工具。
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

