Ho una stringa:
AddData
TestSomething
TellMeWhoYouAre
e così via. Voglio aggiungere spazio prima delle lettere maiuscole. Come posso farlo?
ReadFileFromCDDrivee 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?
ReadFileFromCDDrivee la soluzione di @Kusalananda funziona alla grande.
Risposte:
Usando sede 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
gbandiera. 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.
ReadFileFromUSBDrivein ciò Read File From U S B Driveche 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