첫 글자를 제외하고 Camel Case를 사용하여 뱀 문자열의 이름을 지정하는 방법은 무엇입니까?

첫 글자를 제외하고 Camel Case를 사용하여 뱀 문자열의 이름을 지정하는 방법은 무엇입니까?

나는 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는 \U80년대의 것입니다 ex. GNU를 포함한 vi일부 sed구현 sed도 이를 지원하지만 sedPOSIX 사양에는 없습니다. ocale이 UTF-8(출력 UTF-8)을 사용하는 경우 -CLAO인수 A는 UTF-8로 처리되고 UTF-8로 출력됩니다. 문자열에 바이트 시퀀스가 ​​포함된 경우에도 사용자의 로케일 문자는 그 내용에 관계없이 사용됩니다. 문자로 디코딩할 수 없습니다. 와, YMMV.OLlocale charmapzshawk

관련 정보