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?
8
A
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
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
J'adore les expressions régulières. – cwallenpoole