2009-03-05 48 views
8

在Bash中是否有一種簡單的方法將拼音單詞分解爲其組成單詞?我怎樣才能削減(1)駝峯的話?

例如,我想將aCertainCamelCasedWord拆分爲'某種駝峯字',並能夠選擇那些感興趣的字段。當單詞分隔符是下劃線時,使用剪切(1)可以輕鬆完成此操作,但是,如果單詞是基於單詞的,我怎麼能做到這一點?

回答

27

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

捕捉每個大寫字母和替代與捕獲整個數據流的主要空間。

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

我愛正則表達式。 – cwallenpoole 2009-03-05 17:53:06

0

純擊:

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

有趣,但更詳細。爲我說的工作使用正確的工具! ;) – 2009-03-19 15:15:07

2

我需要不分裂全部大寫:

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

This answer當有多個大寫

的第二個實例無法正常工作
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