Je dois transformer cette chaîne:
Mon nom est l'utilisateur d'ici pas là-bas. p> blockQuote>
à: p>
Mon nom
est strong> user d'ici pas fort> là p> BlockQuote> Les détails sont, j'ai besoin de monter le premier char de n'importe quel mot avec plus de 3 caractères. Juste ça. J'essaie sans succès avec ces commandes: p>
xxx pré> tout le reste doit être minuscule. P> p>
4 Réponses :
Pourriez-vous essayer de suivre. Résultat: P> my Name is User From Here not There.
Merci @triTleee pour le modifier, j'ai oublié d'ajouter une forme de solution à une doublure.
Merci! Fonctionne bien, à l'exception du premier mot qui devrait avoir le premier caractère en majuscule.
Utilisation gnu em> ou: p> sortie: p> notes: p> gnu em> même si Voir le gnu em> sed code>, (et
bash code>):
"$ {f ,} " code> est un
bash code> Extransion de paramètre de modification de cas , il retourne un bas -Case version de
$ f code>, qui devient l'entrée de
sed code>. p>
sed code> offre une offre utile Synonymes et abréviations pour communs regex em> classes de caractères. La classe de caractères
[A-ZA-Z0-9 _] code> peut être abrégée sous forme
[[[: alpha:] _] code> ou plus simple
\ w code >. p>
\ u code> ressemble à un regex em> abréviation, ce n'est pas le cas. C'est un "Séquence spéciale" utilisée uniquement dans
s code> ubstitute em> text de remplacement -
\ u code> signifie "Tournez le caractère suivant sur majuscule" em>. p>
& code> fait référence à ce que fait le premier regexp em> dans le
s code> commande ubstitute em> correspondance. Comparez les éléments suivants: p>
SED code> pages d'information
pour plus de détails. p> p>
Parfait! Je devais ajouter tr '[: supérieure:]' '[: inférieur:]' code> Tout d'abord que d'utiliser votre solution ou ce ne serait pas un généraliste comme dont j'ai besoin. Je cherche vraiment dans la documentation SED mais je ne pouvais pas comprendre comment ces groupes fonctionnent (\ W {4}) \ B, \ u, \ s, pourquoi une barre oblique et un nombre après \ u par exemple, ou &. \ w signifie n'importe quel mot? est comme Regexp? Pourriez-vous expliquer un peu?
@Otavio, voir Réponse plus générale - Le TR code> ne doit plus être nécessaire.
Merci! En utilisant ce que vous avez dit dans Notes, j'ai repris le commando à echo $ peine | Sed -e 's /./ \ l & / g; S /^./ \ u & /; s / (\ b) (\ w \ 4}) / \ 1 \ u \ 2 / g' code>. Sans utiliser de tr. Voudrais utiliser Pearl, pour la portabilité, comme l'a dit Triplee, mais n'avait aucun succès.
Certaines variantes de Perl à la rescousse: p> tr code> n'est pas vraiment le bon outil pour ce travail; Il ne sait pas du contexte du tout.
SED code> ont perl ou
VI code> extensions de regex, mais cela ne peut pas vraiment être résolu de manière portant avec
SED , soit. P>
bash$ foo="my name is user from here not there."
bash$ echo "$foo" | perl -pe 's/\w{4,}/\u$&/g'
my Name is User From Here not There.
Fonctionne bien, sauf pour le premier mot comme vous l'avez dit. Perl semble une bonne option pour remplacer SED, comme je le souhaite à l'avenir d'utiliser ces scripts dans Mac OSX. Merci pour votre réponse!
Changer le regex vers ^ \ w + | \ w {4,} code> prend en charge la capitalisant toute lettre initiale aussi si vous le souhaitez.
Cela pourrait fonctionner pour vous (GNU SED): majuscule le premier caractère d'un mot si ce mot apparaît dans une ligne qui commence par un mot ou un mot 4 ou Plus de caractères long p> p>
À première vue, cela ne semblait pas très différent mon sed code> réponse
, mais le | code> et le remplacement unique sont des améliorations claires. Un tweak - remplacer
^ \ w + code> avec
^. Code> et fonctionne toujours.
Fonctionne vraiment bien. Comme je l'ai dit dans AGC Réponse, je devais tout minuscule avant d'appliquer votre filtre SED, ou des phrases comme si mon nom n'est pas Smith, ne fonctionnerait pas. Désolé pour mon ignorance. J'ai compris jusqu'au dernier \ B, mais comment ça marche? J'ai essayé beaucoup de combinaisons différentes mais sans succès.
@Otavio \ u & code> fait le premier caractère de la chaîne correspondant à la LHS de la commande de substitution, majuscule.
Tout en voyant votre profil, vous devez savoir que vous ne choisissez jamais une réponse aussi correcte, donnez-lui de même et lorsque vous avez des réponses, essayez de sélectionner quelqu'un d'entre eux aussi correct.
Votre titre de question dit plus de 2, mais le corps demande plus de 3. s'il vous plaît Modifier pour faire cela cohérent ou clarifier .
Merci pour les commentaires, ma question était mal formulée, je suppose maintenant est plus claire. À propos de la sélection de la réponse correcte Ravindersingh13, vous êtes correct, mais dans ma vieille question, je cherchais toujours plus de réponses, car aucun d'entre eux ne pouvait résoudre le problème, mais je suppose que personne ne va répondre maintenant.