如何使用驼峰式大小写形式将蛇形字符串命名为首字母除外?

如何使用驼峰式大小写形式将蛇形字符串命名为首字母除外?

我正在使用 bash shell。我曾用它将字符串从蛇形命名法转换为驼峰命名法...

$ echo "this_is_the_string" | sed -r 's/(^|_)([a-z])/\U\2/g'
ThisIsTheString

但是,如果我想保留第一个字母小写怎么办?也就是说,我希望“this_is_the_string”转换为

thisIsTheString

答案1

做就是了:

$ echo "this_is_the_string" | sed -E 's/_([a-z])/\U\1/g'
thisIsTheString

答案2

zsh

$ string=this_is_the_string
$ set -o extendedglob
$ print -r -- ${string//(#b)_(?)/$match[1]:u}
thisIsTheString

不限于拉丁/罗马,更不用说 ASCII 字母,并且还会删除_非字母前面的:

$ string=pi_aka_π_is_3dot14_and_a_Bit
$ print -r -- ${string//(#b)_(?)/$match[1]:u}
piAkaΠIs3dot14AndABit

如果您的字符串包含两个或多个_s 的序列,您可能需要根据您想要对它们执行的操作进行调整。

可移植地使用 POSIX 实用程序,您可以执行以下操作:

awk -- '
  BEGIN {
    s = ARGV[1]
    while (match(s, "_."))
      s = substr(s, 1, RSTART - 1) \
          toupper(substr(s, RSTART + 1, 1)) \
          substr(s, RSTART + 2)
    print s
  }' "$string"

--POSIX 不需要,但旧版本的 busybox 需要awk)。

或者使用perl

perl -CLAO -le 'print $ARGV[0] =~ s/_(.)/\U$1/gr' -- "$string"

IIRC\U是80 年代ex的。包括 GNU 在内的vi一些sed实现sed也支持它,但 POSIXsed规范中没有。如果ocale 使用 UTF-8 (输出 UTF-8),-CLAO则将A参数视为 UTF-8 并以 UTF-8 输出,将使用用户的区域设置字符,无论它们是什么,甚至在字符串包含字节序列时仍然有效无法用字符解码。与,YMMV。OLlocale charmapzshawk

相关内容