2009-03-05 18 views
8

Có cách nào dễ dàng trong Bash để tách một từ được camelcased thành các từ cấu thành của nó?Tôi làm cách nào để cắt (1) từ camelcase?

Ví dụ: tôi muốn chia aCertainCamelCasedWord thành 'một từ cam kết nhất định' và có thể chọn những trường mà tôi quan tâm. Điều này được thực hiện một cách nhỏ nhặt bằng cách cắt (1) khi dấu tách từ là dấu gạch dưới, nhưng làm cách nào tôi có thể thực hiện điều này khi từ đó được camelcased?

Trả lời

27

sed 's/\([A-Z]\)/ \1/g'

Chụp từng chữ cái vốn và thay thế một không gian hàng đầu với việc bắt giữ cho toàn bộ dòng.

$ echo "aCertainCamelCasedWord" | sed 's/\([A-Z]\)/ \1/g' 
a Certain Camel Cased Word 
+0

Tôi thích cụm từ thông dụng. – cwallenpoole

0

tinh khiết Bash:

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[@]}'" 
+0

Thú vị, nhưng nhiều chi tiết hơn. Sử dụng đúng công cụ cho công việc tôi nói! ;) –

2

tôi cần thiết để không chia tay tất cả mũ:

echo 'FAQPage' |sed 's/\([A-Z][^A-Z]\)/ \1/g' 
FAQ Page 
0

This answer không hoạt động đúng khi có một trường hợp thứ hai của nhiều hoa

echo 'FAQPageOneReplacedByFAQPageTwo' | sed 's|\([A-Z][^A-Z]\)| \1|g' 
FAQ Page One Replaced ByFAQ Page Two 

Vì vậy, biểu thức bổ sung là bắt buộc cho rằng

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 
Các vấn đề liên quan