Cómo se reemplaza la primera letra de una palabra en mayúscula, p. Ej.Uppercasing Primera letra de las palabras con SED
Trouble me
Gold rush brides
en
Trouble Me
Gold Rush Brides
Cómo se reemplaza la primera letra de una palabra en mayúscula, p. Ej.Uppercasing Primera letra de las palabras con SED
Trouble me
Gold rush brides
en
Trouble Me
Gold Rush Brides
Esta línea debe hacerlo:
sed -e "s/\b\(.\)/\u\1/g"
Nota: solo funciona con GNU sed. Si estás en OSX, FreeBSD, etc. esto no hace nada. – ghoti
¿Puedes describir lo que está haciendo el comando? La página man, por ejemplo, no muestra esto. –
Le está diciendo a sed que convierta el carácter después de cada palabra en boundry a mayúscula. \ b es la palabra boundry. Visite www.rexegg.com para ver algunas excelentes tablas de símbolos de expresiones regulares útiles. – xizdaqrian
Usando awk
:
awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' file
La salida sería:
Trouble Me
Gold Rush Brides
Esta respuesta es más portátil. Gracias. – yarek
Esto parece funcionar en busybox, mientras que las soluciones sed no. –
Utilice el siguiente comando sed para escribir en mayúscula la primera letra de cada palabra.
echo -e "Trouble me \nGold rush brides" | sed -r 's/\<./\U&/g'
salida
Trouble Me
Gold Rush Brides
Es mucho más agradable cuando no tengo que hacer 'man sed' para entender las respuestas, porque la respuesta contiene una explicación de su contenido. ¿Tal vez considerarías dar una explicación para tu respuesta? –
Es muy fácil y funciona perfectamente. – Urvashi
tuve apóstrofes así, trabajando fuera de la primera solución ...
[email protected]:~$ 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
[email protected]:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed "s/\(\|^\)\(.\)/\1\u\2/g"
Best Western Plus Bob's Inn
Esto también ayuda si tiene mayúsculas en todas partes, pero solo quiere que la PRIMERA letra de cada palabra sea mayúscula – Botond
Otra versión más corta con sed:
sed -e "s/\b./\u\0/g"
Sé que dijo SED, pero para la cáscara scripting uno de los más fáciles y más flexibles para mí fue el uso de Python que está disponible en la mayoría de los sistemas:
$ echo "HELLO WORLD" | python3 -c "import sys; print(sys.stdin.read().title())"
Hello World
Por ejemplo:
$ 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.
también puede usar cosas como strip()
para eliminar espacios, o capitalize()
:
$ echo " This iS mY USER ${USER} " | python3 -c "import sys; print(sys.stdin.read().strip().lower().capitalize())"
This is my user jenkins
Duplicar - http://stackoverflow.com/questions/880597/how-can-i-capitalize-the-first-letter-of-each-word – Salgar
Por qué usar sed para eso? bash puede hacerlo incorporado sin herramientas externas en absoluto. Ejemplo: 'por palabra en Trouble me; printf '% s' "$ {word ^}"; hecho; echo' –