Bash
除了第一個字母外,我如何駱駝式的蛇形字元串?
我正在使用 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"
\U
IIRC 來自/ex
在vi
80 年代。sed
包括 GNU 在內的一些實現sed
也支持它,但不在 POSIXsed
規範中。如果-CLAO
ocale使用 UTF-8(輸出 UTF-8),則將A
參數視為 UTF-8 並以 UTF-8 輸出,將與使用者的語言環境字元一起使用,無論它們是什麼,甚至在字元串包含字節序列時仍然有效不能用字元解碼。與,YMMV。O``L``locale charmap``zsh``awk