![밑줄을 PascalCase(예: UpperCamelCase)로 변환](https://linux55.com/image/63012/%EB%B0%91%EC%A4%84%EC%9D%84%20PascalCase(%EC%98%88%3A%20UpperCamelCase)%EB%A1%9C%20%EB%B3%80%ED%99%98.png)
다음과 같은 문자열이 있는 경우:
"this_is_the_string"
Bash 스크립트에서 다음과 같이 PascalCase, 즉 UpperCamelCase로 변환하고 싶습니다.
"ThisIsTheString"
lowerCamelCase로 변환하는 방법은 다음과 같습니다.
"this_is_the_string" | sed -r 's/([a-z]+)_([a-z])([a-z]+)/\1\U\2\L\3/'
불행히도 저는 정규식을 수정할 만큼 익숙하지 않습니다.
답변1
$ echo "this_is_the_string" | sed -r 's/(^|_)([a-z])/\U\2/g'
ThisIsTheString
(^|_)
문자열의 시작 부분이나 밑줄 뒤(첫 번째
([a-z])
단일 소문자 세트) - 두 번째 전역
대문자 세트
\U\2
(두 번째 세트) 뒤의 패턴을 바꿉니다
g
.
답변2
를 사용하고 있으므로 bash
문자열을 변수에 저장하면 셸에서 이 작업을 수행할 수도 있습니다.
uscore="this_is_the_string_to_be_converted"
arr=(${uscore//_/ })
printf %s "${arr[@]^}"
ThisIsTheStringToBeConverted
${uscore//_/ }
_
모두 공백으로 바꾸고 , (....)
문자열을 배열로 분할하고, ${arr[@]^}
각 요소의 첫 글자를 대문자로 변환한 다음, printf %s ..
모든 요소를 순서대로 인쇄합니다.
CamelCase 문자열을 다른 변수에 저장할 수 있습니다.
printf -v ccase %s "${arr[@]^}"
나중에 다음과 같이 사용/재사용하세요.
printf %s\\n $ccase
ThisIsTheStringToBeConverted
또는 다음을 사용하여 zsh
:
uscore="this_is_the_string_to_be_converted"
arr=(${(s:_:)uscore})
printf %s "${(C)arr}"
ThisIsTheStringToBeConverted
(${(s:_:)uscore})
문자열을 _
배열로 분할하고 (C)
각 요소의 첫 글자를 대문자로 만든 다음 printf %s ...
모든 요소를 순서대로 인쇄합니다.
다른 변수에 저장하려면 (j::)
조인 요소를 사용할 수 있습니다.
ccase=${(j::)${(C)arr}}
나중에 사용/재사용하세요.
printf %s\\n $ccase
ThisIsTheStringToBeConverted
답변3
이것이 Perl 방식입니다:
$ echo "this_is_the_string" | perl -pe 's/(^|_)./uc($&)/ge;s/_//g'
ThisIsTheString
임의 길이의 문자열을 처리할 수 있습니다.
$ echo "here_is_another_larger_string_with_more_parts" |
perl -pe 's/(^|_)./uc($&)/ge;s/_//g'
HereIsAnotherLargerStringWithMoreParts
.
문자열 시작 부분이나 (^|_)
밑줄( ) 뒤의 모든 문자( ) 와 일치 하고 이를 대문자 버전( uc($&)
)으로 바꿉니다. 이것은 $&
방금 일치된 항목을 포함하는 특수 변수입니다. 끝에 있는 것은 e
교체에 표현식(이 경우 함수)을 사용할 수 있도록 s///ge
하고 교체되도록 합니다.uc()
g
모두라인에서 발생합니다. 두 번째 대체는 밑줄을 제거합니다.
답변4
대표할 필요 없어모두정규식 일치의 문자열 - sed에는 /g
여러 일치 항목을 반복하고 각각을 바꿀 수 있는 수정자가 있습니다.
echo "this_is_the_string" | sed 's/_\([a-z]\)/\U\1/g;s/^\([a-z]\)/\U\1/g'
첫 번째 정규식은 _\([a-z]\)
밑줄 뒤의 각 문자입니다. 두 번째 정규식은 문자열의 첫 번째 문자와 일치합니다.