2009-10-08 23 views
25

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 
+1

Duplicar - http://stackoverflow.com/questions/880597/how-can-i-capitalize-the-first-letter-of-each-word – Salgar

+2

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' –

Respuesta

50

Esta línea debe hacerlo:

sed -e "s/\b\(.\)/\u\1/g" 
+14

Nota: solo funciona con GNU sed. Si estás en OSX, FreeBSD, etc. esto no hace nada. – ghoti

+0

¿Puedes describir lo que está haciendo el comando? La página man, por ejemplo, no muestra esto. –

+0

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

13

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 
+0

Esta respuesta es más portátil. Gracias. – yarek

+0

Esto parece funcionar en busybox, mientras que las soluciones sed no. –

5

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 
+4

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? –

+0

Es muy fácil y funciona perfectamente. – Urvashi

4

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

+2

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

2

Otra versión más corta con sed:

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

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 
Cuestiones relacionadas