Tengo unas cuerdas:
AddData
TestSomething
TellMeWhoYouAre
y así. Quiero agregar espacio antes de las letras mayúsculas. ¿Cómo puedo hacerlo?
ReadFileFromCDDrivealgunas cadenas como y la solución de @Kusalananda funciona muy bien.
Tengo unas cuerdas:
AddData
TestSomething
TellMeWhoYouAre
y así. Quiero agregar espacio antes de las letras mayúsculas. ¿Cómo puedo hacerlo?
ReadFileFromCDDrivealgunas cadenas como y la solución de @Kusalananda funciona muy bien.
Respuestas:
Usando sed, y asumiendo 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 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 de mayúsculas consecutivas, 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
gbandera. Pruebe echo ThisIsATest | sed 's/\(.\)\([[:upper:]]\)/\1 \2/g'(su comando) para ver por qué no funciona.
s/[A-Z]/ \0/ges completamente satisfactorio ... `s / [AZ] / \ 0 / g; s / ^ // 'si realmente te importa.
Perl, usando expresiones regulares de ancho cero y mirar hacia atrás:
$ 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 está separando letras mayúsculas consecutivas.
ReadFileFromUSBDriveen Read File From U S B Drivemientras que el OP quería Read File From USB Drive.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Agregue espacio entre una letra que no es mayúscula y una letra que es mayúscula
[^^]("not a caret ( ^)")?
Solución 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
print(line[0], end="")seguir for char in line[1:]:para evitar imprimir ese espacio no deseado al comienzo de cada línea de salida.
IClimbALadder