Eu tenho uma corda:
AddData
TestSomething
TellMeWhoYouAre
e assim por diante. Quero adicionar espaço antes de letras maiúsculas. Como eu posso fazer isso?
ReadFileFromCDDrive
e a solução do @Kusalananda funciona muito bem.
Eu tenho uma corda:
AddData
TestSomething
TellMeWhoYouAre
e assim por diante. Quero adicionar espaço antes de letras maiúsculas. Como eu posso fazer isso?
ReadFileFromCDDrive
e a solução do @Kusalananda funciona muito bem.
Respostas:
Usando sed
e assumindo que você não deseja um espaço na frente da palavra:
$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
A substituição procurará uma letra maiúscula imediatamente após outro caractere que não seja um espaço em branco e inserirá um espaço entre os dois.
Para seqüências com mais de um caractere maiúsculo consecutivo, como WeAreATeam
, isso produz We Are ATeam
. Para classificar isso, execute a substituição uma segunda vez:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
g
sinalizador. Tente echo ThisIsATest | sed 's/\(.\)\([[:upper:]]\)/\1 \2/g'
(seu comando) para ver por que não funciona.
s/[A-Z]/ \0/g
é totalmente satisfatório ... `s / [AZ] / \ 0 / g; s / ^ // 'se você realmente se importa.
Perl, usando expressões regulares lookbehind e lookahead com largura zero:
$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g' file.in
Tell Me Who You Are ## TellMeWhoYouAre
I Am A Regular Expression User ## IAmARegulaExpressionUser
Esta versão também está separando letras maiúsculas consecutivas.
ReadFileFromUSBDrive
no Read File From U S B Drive
que o OP queria Read File From USB Drive
.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Adicione espaço entre uma letra que não seja uma letra maiúscula e uma letra que seja uma letra maiúscula
[^^]
("não é um sinal de intercalação ( ^
)")?
Solução 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="")
Execução de teste:
$ ./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 a impressão desse espaço indesejado no início de cada linha de saída.
IClimbALadder