Ho una stringa:
AddData
TestSomething
TellMeWhoYouAre
e così via. Voglio aggiungere spazio prima delle lettere maiuscole. Come posso farlo?
ReadFileFromCDDrive
e la soluzione di @Kusalananda funziona alla grande.
Ho una stringa:
AddData
TestSomething
TellMeWhoYouAre
e così via. Voglio aggiungere spazio prima delle lettere maiuscole. Come posso farlo?
ReadFileFromCDDrive
e la soluzione di @Kusalananda funziona alla grande.
Risposte:
Usando sed
e supponendo che tu non voglia uno spazio davanti alla parola:
$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
La sostituzione cercherà una lettera maiuscola immediatamente successiva a un altro carattere non bianco e inserirà uno spazio tra i due.
Per stringhe con più di un carattere maiuscolo consecutivo, come WeAreATeam
, questo produce We Are ATeam
. Per ordinare questo, eseguire la sostituzione una seconda volta:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
g
bandiera. Prova echo ThisIsATest | sed 's/\(.\)\([[:upper:]]\)/\1 \2/g'
(il tuo comando) per capire perché non funziona.
s/[A-Z]/ \0/g
è del tutto soddisfacente ... `s / [AZ] / \ 0 / g; s / ^ // 'se ti interessa davvero.
Perl, usando le espressioni regolari a larghezza zero di lookbehind e lookahead:
$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g' file.in
Tell Me Who You Are ## TellMeWhoYouAre
I Am A Regular Expression User ## IAmARegulaExpressionUser
Questa versione separa anche lettere maiuscole consecutive.
ReadFileFromUSBDrive
in ciò Read File From U S B Drive
che l'OP voleva Read File From USB Drive
.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Aggiungi spazio tra una lettera che non è una lettera maiuscola e una lettera che è una lettera maiuscola
[^^]
("not a caret ( ^
)")?
Soluzione 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="")
Prova:
$ ./add_space_to_upper.py input.txt
Add Data
Test Something
Tell Me Who You Are
print(line[0], end="")
seguire for char in line[1:]:
per evitare di stampare quello spazio indesiderato all'inizio di ogni riga di output.
IClimbALadder