Ich habe eine Saite:
AddData
TestSomething
TellMeWhoYouAre
und so weiter. Ich möchte vor Großbuchstaben Leerzeichen einfügen. Wie kann ich es tun?
ReadFileFromCDDriveund @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?
ReadFileFromCDDriveund @Kusalanandas Lösung funktioniert großartig.
Antworten:
Verwenden sedund 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.
WeAreATeamDies 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
gFlagge. Versuchen Sie echo ThisIsATest | sed 's/\(.\)\([[:upper:]]\)/\1 \2/g'(Ihr Befehl) herauszufinden, warum es nicht funktioniert.
s/[A-Z]/ \0/gganz 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.
ReadFileFromUSBDrivezu, Read File From U S B Drivewä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