J'ai des cordes:
AddData
TestSomething
TellMeWhoYouAre
etc. Je veux ajouter de l'espace avant les lettres majuscules. Comment puis-je le faire?
ReadFileFromCDDrive
et la solution de @Kusalananda fonctionne très bien.
J'ai des cordes:
AddData
TestSomething
TellMeWhoYouAre
etc. Je veux ajouter de l'espace avant les lettres majuscules. Comment puis-je le faire?
ReadFileFromCDDrive
et la solution de @Kusalananda fonctionne très bien.
Réponses:
En utilisant sed
et en supposant que vous ne voulez pas d'espace devant le mot:
$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
La substitution recherchera une lettre majuscule immédiatement après un autre caractère non blanc et insérera un espace entre les deux.
Pour les chaînes avec plus d'un caractère majuscule consécutif, par exemple WeAreATeam
, cela produit We Are ATeam
. Pour trier cela, exécutez la substitution une deuxième fois:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
g
indicateur. Essayez echo ThisIsATest | sed 's/\(.\)\([[:upper:]]\)/\1 \2/g'
(votre commande) pour voir pourquoi cela ne fonctionne pas.
s/[A-Z]/ \0/g
tout à fait satisfaisant ... `s / [AZ] / \ 0 / g; s / ^ // 'si vous vous en souciez vraiment.
Perl, en utilisant les expressions régulières de largeur nulle lookbehind et lookahead:
$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g' file.in
Tell Me Who You Are ## TellMeWhoYouAre
I Am A Regular Expression User ## IAmARegulaExpressionUser
Cette version sépare également les lettres majuscules consécutives.
ReadFileFromUSBDrive
en Read File From U S B Drive
alors que l'OP voulait Read File From USB Drive
.
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Ajouter de l'espace entre une lettre qui n'est pas une lettre majuscule et une lettre qui est une lettre majuscule
[^^]
("pas un caret ( ^
)")?
Solution 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="")
Essai:
$ ./add_space_to_upper.py input.txt
Add Data
Test Something
Tell Me Who You Are
print(line[0], end="")
suivre for char in line[1:]:
pour éviter d'imprimer cet espace indésirable au début de chaque ligne de sortie.
IClimbALadder