나는 bash 쉘을 사용하고 있습니다. 나는 문자열을 뱀에서 낙타 케이스로 변환하는 데 사용했습니다 ...
$ 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
도 이를 지원하지만 sed
POSIX 사양에는 없습니다. ocale이 UTF-8(출력 UTF-8)을 사용하는 경우 -CLAO
인수 A
는 UTF-8로 처리되고 UTF-8로 출력됩니다. 문자열에 바이트 시퀀스가 포함된 경우에도 사용자의 로케일 문자는 그 내용에 관계없이 사용됩니다. 문자로 디코딩할 수 없습니다. 와, YMMV.O
L
locale charmap
zsh
awk