2009-03-05 5 views
8

キャセリングされた単語を構成単語に分割する簡単な方法はありますか?どのように私は(1)ラクダの言葉を切ることができますか?

たとえば、「特定のCamel Cased Word」に「aCertainCamelCasedWord」を分割し、興味のあるフィールドを選択できるようにしたいとします。これは、単語区切り記号がアンダースコアの場合にはcut(1)を使って簡単に実行されますが、単語がcamelcasedのときはどうすればいいですか?

答えて

27

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

各大文字をキャプチャし、ストリーム全体のキャプチャを先頭にスペースを置き換えます。

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

ために必要です。 – cwallenpoole

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

興味深いですが、はるかに冗長です。私が言う仕事には、適切なツールを使用してください! ;) –

2

私はすべてのキャップを分割しないように必要な:複数の大文字の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 
関連する問題