Utilizzando 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 dopo un altro carattere diverso da uno spazio 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 risolvere questo problema, esegui la sostituzione una seconda volta:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Perl, utilizzando le espressioni regolari di larghezza zero 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 le lettere maiuscole consecutive.
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