Ich habe eine Saite:
AddData
TestSomething
TellMeWhoYouAre
und so weiter. Ich möchte vor Großbuchstaben Leerzeichen einfügen. Wie kann ich es tun?
ReadFileFromCDDrive
und @Kusalanandas Lösung funktioniert großartig.
Ich habe eine Saite:
AddData
TestSomething
TellMeWhoYouAre
und so weiter. Ich möchte vor Großbuchstaben Leerzeichen einfügen. Wie kann ich es tun?
ReadFileFromCDDrive
und @Kusalanandas Lösung funktioniert großartig.
Antworten:
Verwenden 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
Bei der Ersetzung wird nach einem Großbuchstaben gesucht, der unmittelbar auf ein anderes Nicht-Leerzeichen folgt, und ein Leerzeichen zwischen den beiden eingefügt.
WeAreATeam
Dies ergibt für Zeichenfolgen mit mehr als einem aufeinanderfolgenden Großbuchstaben Folgendes We Are ATeam
. Führen Sie die Substitution ein zweites Mal aus, um dies zu sortieren:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
g
Flagge. Versuchen Sie echo ThisIsATest | sed 's/\(.\)\([[:upper:]]\)/\1 \2/g'
(Ihr Befehl) herauszufinden, warum es nicht funktioniert.
s/[A-Z]/ \0/g
ganz zufrieden stellend ist ... `s / [AZ] / \ 0 / g; s / ^ //‘ , wenn Sie wirklich interessieren.
Perl, mit regulären Ausdrücken von lookbehind und lookahead mit der Breite Null:
$ 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.
ReadFileFromUSBDrive
zu, Read File From U S B Drive
während das OP wollte Read File From USB Drive
.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Fügen Sie Leerzeichen zwischen einem Buchstaben, der kein Großbuchstabe ist, und einem Buchstaben, der ein Großbuchstabe ist, hinzu
[^^]
("kein Caret ( ^
)")?
Python-Lösung:
#!/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="")
Testlauf:
$ ./add_space_to_upper.py input.txt
Add Data
Test Something
Tell Me Who You Are
print(line[0], end="")
gefolgt von for char in line[1:]:
Drucken , dass unerwünschte Leerzeichen am Anfang jeder Ausgangsleitung zu vermeiden.
IClimbALadder