web-dev-qa-db-fra.com

Mise en majuscule de la première lettre de mots à l'aide de SED

Comment remplacez-vous la première lettre d'un mot en lettre majuscule, P. Ex.

Trouble me
Gold Rush brides

dans 

Trouble Me
Gold Rush Brides
36
neversaint

Cette ligne devrait le faire:

sed -e "s/\b\(.\)/\u\1/g"
62
tangens

Utilisation de awk:

awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' file

La sortie serait:

Trouble Me
Gold Rush Brides
21
ghostdog74

Utilisez la commande sed suivante pour mettre en majuscule la première lettre de chaque mot.

echo -e "Trouble me \nGold Rush brides" | sed -r 's/\<./\U&/g'

sortie

Trouble Me
Gold Rush Brides

Le commutateur -r indique à sed d'utiliser des expressions régulières étendues. Les instructions à sed indiquent ensuite à "s earch et remplacez" (la s au début) le motif \<. par le motif \U&g globalement, c'est-à-dire toutes les occurrences. dans chaque ligne (c'est le modificateur g à la fin). Le modèle que nous recherchons est \<. qui recherche un limite de mot (\<) suivi de tout caractère _ (.). Le modèle de remplacement est \U&, où \U donne l'instruction sed à mettre le texte suivant en majuscule et & à synonyme de \0 , qui fait référence à "tout ce qui correspondait". Dans ce cas, "tout ce qui correspondait" correspond exactement à ce que . correspondait, car les limites de mot ne sont pas incluses dans les correspondances (à la place, elles sont ancres). Ce que . correspond est juste un caractère, c'est donc ce qui est en majuscule.

10
rekha_sri

Une autre version plus courte avec sed:

sed -e "s/\b./\u\0/g"
4
chtimi59

J'ai eu des apostrophes alors, travaillant sur la première solution ...

mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed -e "s/\b\(.\)/\u\1/g"

Best Western Plus Bob'S Inn

mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed "s/\( \|^\)\(.\)/\1\u\2/g"

Best Western Plus Bob's Inn

4
mikejonesey

Je sais que vous avez dit sed, mais pour les scripts Shell, l’un des moyens les plus simples et les plus souples était d’utiliser Python, qui est disponible dans la plupart des systèmes:

$ echo "HELLO WORLD" | python3 -c "import sys; print(sys.stdin.read().title())"
Hello World

Par exemple:

$ lorem | python3 -c "import sys; print(sys.stdin.read().title())"
Officia Est Omnis Quia. Nihil Et Voluptatem Dolor Blanditiis Sit Harum. Dolore Minima Suscipit Quaerat. Soluta Autem Explicabo Saepe. Recusandae Molestias Et Et Est Impedit Consequuntur. Voluptatum Architecto Enim Nostrum Ut Corrupti Nobis.

Vous pouvez également utiliser des éléments tels que strip() pour supprimer des espaces ou capitalize():

$ echo "  This iS mY USER ${USER}   " | python3 -c "import sys; print(sys.stdin.read().strip().lower().capitalize())"
This is my user jenkins
3
Havok

Utiliser sed with tr :

name="athens"
echo $name | sed -r "s/^[[:alpha:]]/$(echo ${name:0:1} | tr [[:lower:]] [[:upper:]])/"
0
mark_infinite