Usando sed
, y suponiendo que no desea 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 buscará una letra mayúscula inmediatamente después de otro carácter que no sea un espacio en blanco e insertará un espacio entre los dos.
Para cadenas con más de un carácter consecutivo en mayúsculas, como WeAreATeam
, esto produce We Are ATeam
. Para ordenar 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 de búsqueda posterior y anterior:
$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g' file.in
Tell Me Who You Are ## TellMeWhoYouAre
I Am A Regular Expression User ## IAmARegulaExpressionUser
Esta versión también separa letras mayúsculas consecutivas.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Agregar espacio entre una letra que no sea mayúscula y una letra que sea mayúscula