Mit sed
, und vorausgesetzt, Sie möchten kein Leerzeichen vor dem Wort:
$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
Die Ersetzung sucht nach einem Großbuchstaben, der unmittelbar auf ein anderes Nicht-Leerzeichen folgt, und fügt zwischen den beiden ein Leerzeichen ein.
Für Zeichenfolgen mit mehr als einem aufeinanderfolgenden Großbuchstaben, wie WeAreATeam
, dies erzeugt We Are ATeam
. Um dies zu sortieren, führen Sie die Ersetzung ein zweites Mal aus:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Perl, das Lookbehind und Lookahead mit regulären Ausdrücken mit Nullbreite verwendet:
$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g' file.in
Tell Me Who You Are ## TellMeWhoYouAre
I Am A Regular Expression User ## IAmARegulaExpressionUser
Diese Version trennt auch aufeinanderfolgende Großbuchstaben.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Fügen Sie ein Leerzeichen zwischen einem Buchstaben hinzu, der kein Großbuchstabe ist, und einem Buchstaben, der ein Großbuchstabe ist