2009-10-08 5 views
25

Как заменить первую букву слова на прописную букву, ?Uppercasing First Letter of Words Использование SED

Trouble me 
Gold rush brides 

в

Trouble Me 
Gold Rush Brides 
+1

Дубликат - http://stackoverflow.com/questions/880597/how-can-i-capitalize-the-first-letter-of-each-word – Salgar

+2

Зачем использовать СЭД для этого? bash может сделать это встроенным без каких-либо внешних инструментов. Пример: 'на слово в Trouble me; do printf '% s' "$ {word ^}"; сделанный; echo' –

ответ

50

Эта линия должна это сделать:

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

Примечание: работает только с GNU sed. Если вы находитесь в OSX, FreeBSD и т. Д., Это ничего не делает. – ghoti

+0

Вы описываете, что делает команда? Например, страница руководства не перечисляет это. –

+0

Это говорит sed, чтобы преобразовать персонажа после каждого символа слова в верхний регистр. \ b - граница слов. Зайдите на сайт www.rexegg.com для получения некоторых полезных таблиц полезных символов регулярных выражений. – xizdaqrian

13

Использование awk:

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

Выход будет:

Trouble Me 
Gold Rush Brides 
+0

Этот ответ наиболее переносимый. Спасибо. – yarek

+0

Это, похоже, работает на busybox, тогда как sed-решения этого не делают. –

5

Используйте следующую команду sed для заглавной буквы первой буквы каждого слова.

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

выход

Trouble Me 
Gold Rush Brides 
+4

Это гораздо приятнее, когда мне не нужно делать «man sed», чтобы понимать ответы, потому что ответ содержит объяснение его содержания. Может быть, вы подумаете о том, чтобы дать объяснение для вашего ответа? –

+0

Это так просто и отлично работает. – Urvashi

4

Я был апостроф так, отработку первое решение ...

[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

это также помогает, если у вас есть заглавные буквы, но вы хотите, чтобы первая буква каждого слова была столицей – Botond

2

Другой сокращенный вариант с СЭД:

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

Я знаю, что вы сказали СЭД, но и для оболочки сценариев одной из самых простых и более гибкой для меня использует Python, который доступен в большинстве систем:

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

Например:

$ 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. 

Вы также можете использовать такие вещи, как strip() удалить пробелы, или capitalize():

$ echo " This iS mY USER ${USER} " | python3 -c "import sys; print(sys.stdin.read().strip().lower().capitalize())" 
This is my user jenkins 
Смежные вопросы