Utilisation de sed
, et en supposant que vous ne vouliez pas d'espace devant le mot :
$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
La substitution recherchera une lettre majuscule immédiatement après un autre caractère non blanc et insérera un espace entre les deux.
Pour les chaînes avec plus d'un caractère majuscule consécutif, comme WeAreATeam
, cela produit We Are ATeam
. Pour trier cela, exécutez la substitution une seconde fois :
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Perl, utilisant des expressions régulières de largeur nulle lookbehind et lookahead :
$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g' file.in
Tell Me Who You Are ## TellMeWhoYouAre
I Am A Regular Expression User ## IAmARegulaExpressionUser
Cette version sépare également les lettres majuscules consécutives.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Ajouter un espace entre une lettre qui n'est pas une lettre majuscule et une lettre qui est une lettre majuscule