Tengo unas cuerdas:
AddData
TestSomething
TellMeWhoYouAre
y así. Quiero agregar espacio antes de las letras mayúsculas. ¿Cómo puedo hacerlo?
ReadFileFromCDDrive
algunas 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?
ReadFileFromCDDrive
algunas 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
g
bandera. Pruebe echo ThisIsATest | sed 's/\(.\)\([[:upper:]]\)/\1 \2/g'
(su comando) para ver por qué no funciona.
s/[A-Z]/ \0/g
es 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.
ReadFileFromUSBDrive
en Read File From U S B Drive
mientras 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