Bash

除了第一個字母外,我如何駱駝式的蛇形字元串?

  • August 31, 2022

我正在使用 bash shell。我用它來將字元串從蛇形大小寫轉換為駝形大小寫……

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

但是,如果我想保持第一個字母小寫怎麼辦?也就是說,我希望“this_is_the_string”轉換為

thisIsTheString

做就是了:

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

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"

--不需要POSIXly,但舊版本的busybox需要awk)。

或使用perl

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

\UIIRC 來自/exvi80 年代。sed包括 GNU 在內的一些實現sed也支持它,但不在 POSIXsed規範中。如果-CLAOocale使用 UTF-8(輸出 UTF-8),則將A參數視為 UTF-8 並以 UTF-8 輸出,將與使用者的語言環境字元一起使用,無論它們是什麼,甚至在字元串包含字節序列時仍然有效不能用字元解碼。與,YMMV。O``L``locale charmap``zsh``awk

引用自:https://unix.stackexchange.com/questions/715641