Agregar espacio antes de la letra mayúscula

Tengo una string:

AddData TestSomething TellMeWhoYouAre 

y así. Quiero agregar espacio antes de letras mayúsculas. ¿Cómo puedo hacerlo?

Usando sed , y suponiendo que no quieres un espacio delante de la palabra:

 $ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in Add Data Test Something Tell Me Who You Are 

La sustitución searchá una letra mayúscula inmediatamente después de otro carácter que no sea de espacio en blanco, e insertá un espacio entre los dos.

Para cadenas con más de un carácter en mayúsculas consecutivas, como WeAreATeam , esto produce We Are ATeam . Para orderar esto, ejecute la sustitución por segunda vez:

 $ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \ -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in 

Perl, utilizando expresiones regulares de ancho cero look-before y lookahead:

 $ perl -pe 's/(?<=\w)(?=[AZ])/ /g' file.in Tell Me Who You Are ## TellMeWhoYouAre I Am A Regular Expression User ## IAmARegulaExpressionUser 

Esta versión también separa las letras mayúsculas consecutivas.

 sed -r -e "s/([^AZ])([AZ])/\1 \2/g" 

Agregue espacio entre una letra que no sea una letra mayúscula y una letra que sea una letra mayúscula

Solución de Python:

 #!/usr/bin/env python from __future__ import print_function import sys with open(sys.argv[1]) as f: for line in f: for char in line: if char.isupper(): print(" "+char,end="") else: print(char,end="") 

Prueba de funcionamiento:

 $ ./add_space_to_upper.py input.txt Add Data Test Something Tell Me Who You Are