2009-03-05 6 views
8

Y at-il un moyen facile dans Bash de diviser un mot camelcased en ses mots constitutifs? Par exemple, je veux diviser aCertainCamelCasedWord en 'un certain mot camel Cased' et être capable de sélectionner les champs qui m'intéressent. C'est trivialement fait avec cut (1) quand le séparateur de mots est le trait de soulignement, mais comment puis-je le faire quand le mot est camelcased?Comment puis-je couper (1) les mots camelcase?

Répondre

27

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

capture chaque lettre majuscule et substitue un espace de premier plan avec la capture du flux entier.

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

J'adore les expressions régulières. – cwallenpoole

0

Bash pur:

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

Intéressant, mais beaucoup plus bavard. Utilisez le bon outil pour le travail que je dis! ;) –

2

je devais pas séparer majuscules:

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

This answer ne fonctionne pas correctement quand il y a une deuxième instance de majuscules multiples

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

Ainsi et d'expression supplémentaire est nécessaire pour que

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 
Questions connexes