(1) 카멜 케이스 단어를 어떻게자를 수 있습니까?
-
03-07-2019 - |
문제
Bash가 낙타 표적 단어를 구성 단어로 나누는 쉬운 방법이 있습니까?
예를 들어, AcezeterCamelcasedword를 '특정 낙타 케이스 워드'로 나누고 관심있는 필드를 선택할 수 있기를 원합니다. 이것은 분리기라는 단어가 밑줄 일 때 컷 (1)으로 사소하게 이루어 지지만 단어가 낙타 할 때 어떻게해야합니까?
해결책
sed 's/\([A-Z]\)/ \1/g'
각 대문자를 캡처하고 전체 스트림을위한 캡처와 선행 공간을 대체합니다.
$ echo "aCertainCamelCasedWord" | sed 's/\([A-Z]\)/ \1/g'
a Certain Camel Cased Word
다른 팁
이 솔루션은 모든 캡 인 단어를 분할하지 않아도됩니다. 예를 들어, 최고 답변을 사용하면 다음과 같이받을 수 있습니다.
$ echo 'FAQPage' | sed 's/\([A-Z]\)/ \1/g'
F A Q Page
그러나 대신 내 솔루션을 사용하면 다음을 얻을 수 있습니다.
$ echo 'FAQPage' | sed 's/\([A-Z][^A-Z]\)/ \1/g'
FAQ Page
참고 : 예를 들어 여러 대문자 단어의 두 번째 인스턴스가있는 경우 올바르게 작동하지 않습니다.
$ echo 'FAQPageOneReplacedByFAQPageTwo' | sed 's|\([A-Z][^A-Z]\)| \1|g'
FAQ Page One Replaced ByFAQ Page Two
이 답변 여러 대문자의 두 번째 인스턴스가있을 때 올바르게 작동하지 않습니다.
echo 'FAQPageOneReplacedByFAQPageTwo' | sed 's|\([A-Z][^A-Z]\)| \1|g'
FAQ Page One Replaced ByFAQ Page Two
따라서 추가 표현이 필요합니다
echo 'FAQPageOneReplacedByFAQPageTwo' | sed -e 's|\([A-Z][^A-Z]\)| \1|g' -e 's|\([a-z]\)\([A-Z]\)|\1 \2|g'
FAQ Page One Replaced By FAQ Page Two
순수한 배쉬 :
name="aCertainCamelCasedWord"
declare -a word # the word array
counter1=0 # count characters
counter2=0 # count words
while [ $counter1 -lt ${#name} ] ; do
nextchar=${name:${counter1}:1}
if [[ $nextchar =~ [[:upper:]] ]] ; then
((counter2++))
word[${counter2}]=$nextchar
else
word[${counter2}]=${word[${counter2}]}$nextchar
fi
((counter1++))
done
echo -e "'${word[@]}'"
제휴하지 않습니다 StackOverflow