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
Cette ligne devrait le faire:
sed -e "s/\b\(.\)/\u\1/g"
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
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.
Une autre version plus courte avec sed:
sed -e "s/\b./\u\0/g"
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
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
Utiliser sed with tr :
name="athens"
echo $name | sed -r "s/^[[:alpha:]]/$(echo ${name:0:1} | tr [[:lower:]] [[:upper:]])/"